Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.12.2018, 02:02
Интересующийся
Отправить личное сообщение для ishurgaya Посмотреть профиль Найти все сообщения от ishurgaya
 
Регистрация: 12.08.2015
Сообщений: 29

Ошибка при чтении json полученного через ajax
Здравствуйте.

Хочу сделать подгрузку json через ajax, с последующим поиском по json, по :

var json;
var xmlhttp;
var products;		

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp = new XMLHttpRequest();
}
else
{// code for IE6, IE5
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function()
{
		if (xmlhttp.readyState==4 && xmlhttp.status==200)
		{
			json = JSON.stringify(xmlhttp.responseText);

			json = JSON.parse(json);
		}
}
xmlhttp.open("GET","/app/js/lib.json",true); 
xmlhttp.send();
		
function searchPositions(arr, searchKey) 
{
return arr.filter(obj => Object.keys(obj).some(key => obj[key].includes(searchKey)));
}

products = searchPositions(json, "текст");


В итоге получаю ошибку в строке return arr.filter(obj => Object.keys(obj).some(key => obj[key].includes(searchKey))); :
main.js:270 Uncaught TypeError: arr.filter is not a function

Причем если json вставить сразу в код, примерно так, то ошибок не будет и поиск отрабатывает:

json = JSON.stringify([{"id":1,"low_name":"белый карандаш","name":"Карандаш"},{"id":2,"low_name":"синий фломастер","name":"Фломастер"},{"id":3,"low_name":"черный маркер","name":"Маркер"}]);



Как исправить эту ошибку?

Файл json , который я пытаюсь получить через ajax создается заново каждый день и встроить его в js файл нет возможности.
Ответить с цитированием
  #2 (permalink)  
Старый 10.12.2018, 03:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

ishurgaya,
всё что вам нужно, надо делать в конце строки 19, а не в строке 30.
асинхронность!!!

Последний раз редактировалось рони, 10.12.2018 в 06:28.
Ответить с цитированием
  #3 (permalink)  
Старый 10.12.2018, 06:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от ishurgaya
JSON.stringify(xmlhttp.responseText)
Это зачем?
Ответить с цитированием
  #4 (permalink)  
Старый 10.12.2018, 08:43
Интересующийся
Отправить личное сообщение для ishurgaya Посмотреть профиль Найти все сообщения от ishurgaya
 
Регистрация: 12.08.2015
Сообщений: 29

Сообщение от рони Посмотреть сообщение
ishurgaya,
всё что вам нужно, надо делать в конце строки 19, а не в строке 30.
асинхронность!!!
я просто хочу чтобы после загрузке страницы запустился ajax и задал значение переменной.

А потом уже по событию keyup в текстовом поле с id search_field запускался поиск:
document.addEventListener("keyup", function(e) {
if (e.target.id == 'search_field') 
{
    if(e.target.value.length > 1){
        products = searchPositions(json, "текст");
    }
});


Так невозможно сделать заранее задать значение переменной?

Последний раз редактировалось ishurgaya, 10.12.2018 в 09:09.
Ответить с цитированием
  #5 (permalink)  
Старый 10.12.2018, 08:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

ishurgaya,
Сообщение от ishurgaya
document.addEventListener("keyup",
Сообщение от рони
надо делать в конце строки 19,
надо научится так делать и мыслить.
Сообщение от ishurgaya
Так невозможно сделать заранее задать значение переменной?
можно, но когда нибудь потом, es6, но под капотом будет тоже самое что выше.
Ответить с цитированием
  #6 (permalink)  
Старый 10.12.2018, 09:01
Интересующийся
Отправить личное сообщение для ishurgaya Посмотреть профиль Найти все сообщения от ishurgaya
 
Регистрация: 12.08.2015
Сообщений: 29

Сообщение от laimas Посмотреть сообщение
Это зачем?
иначе:
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 105 of the JSON data
Ответить с цитированием
  #7 (permalink)  
Старый 10.12.2018, 09:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

ishurgaya,
с сервера запрашивается json, сервер его и отдает, так? Значит полученное от сервера нужно декорировать, а не кодировать. А ошибка от того, что сервер отдает невалидный json, вот с этим и надо разбираться.
Ответить с цитированием
  #8 (permalink)  
Старый 10.12.2018, 09:20
Интересующийся
Отправить личное сообщение для ishurgaya Посмотреть профиль Найти все сообщения от ishurgaya
 
Регистрация: 12.08.2015
Сообщений: 29

действительно.
laimas и рони огромное спасибо!

Перенес код ниже в 19 строку
document.addEventListener("keyup", function(e) {

if (e.target.id == 'search_field')
{
     if(e.target.value.length > 1){
	  products = searchPositions(json, "текст");
     }
});


JSON.stringify убрал. действительно был некоректный json, добавил [ ]
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение значения переменной в куках или передача через ajax tvixa Элементы интерфейса 1 04.02.2016 07:57
Ошибка 500 при обращении через аякс imedia AJAX и COMET 1 04.07.2015 14:08
Перестает работать галерея при загрузке через Ajax (Need help) Clodan jQuery 0 20.04.2015 20:18
БД JSON вывод через jQuery Infinity178 jQuery 13 09.03.2015 21:32
отправка данных в инпут через AJAX imediasun1 Элементы интерфейса 2 30.01.2013 18:06