Передача смешанного массива из php в js
Запрос на сервер посылается через xmlhttp объект.
Принимает ответ в xmlhttp.responseText Как можно получить ответ в виде массива, а не строки. Передаваемый массив содержит как строки так и числа. Все строки закодированы в utf-8 и при передаче с использованием json получается что-то следующее: "class_name":"\u041a\u0430\u0442\u0435\u0433\u043e \u0440\u0438\u044f \u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u 0441\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u 043c" Как это все превратить в чиабельную строку? Числовые данные приходят в нормальном виде, но как с ними потом работать? Заранее спасибо. |
alert("\u041a\u0430\u0442\u0435\u0433\u043e \u0440\u0438\u044f \u0441\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c") там пробелов пару лишних, но в принципе это нормальный текст |
Цитата:
А как получать доступ к значениям? var result = xmlhttp.responseText; alert(result.class_name); // Не работает alert(result["class_name"]); // Не работает alert(result[class_name]); // Не работает Во всех трех случаях получаю undefined. |
может там нет ничего)
попробуйте вывести в консоль всю переменную console.log(result) |
alert(result); Выдает результат: {"class_id":"5","class_name":"\u041a\u0430\u0442\u 0435\u0433\u043e\u0440\u0438\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u 044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u 044f \u043c\u043e\u0442\u043e\u0446\u0438\u043a\u043b\u 044b","class_name_short":"\u041c\u043e\u0442\u043e \u0446\u0438\u043a\u043b\u0438\u0441\u0442\u044b", "visible":"1","amount_tickets":"100"} И как мне из этого счастья отдельные значения выуживать? |
var result={"class_id":"5","class_name":"\u041a\u0430\u0442", "visible":"1","amount_tickets":"100"} alert(result.class_name); вроде как нормально всё попробуйте это ещё http://api.jquery.com/jQuery.parseJSON/ |
Так у меня же
var result = xmlhttp.responseText; а не var result = {"class_id":"5","class_name":"\u041a\u0430\u0442", "visible":"1","amount_tickets":"100"} Видимо где-то загвоздка в том, что все это дело с сервера приходит. Код на сервере: echo(json_encode($row)); $row является ассоциативным php массивом с результатаим выборки из БД. |
Может быть проблема в том, что в php и в js utf-8 символы занимают разное количество байт и поэтому js не видит это все как массив?
Тогда как передавать, чтобы все сработало? |
Цитата:
Конечно если нет другого пути, то прийдется разобраться с jquery, но желательно найти решение без него. Может даже как-то по другому, не через json. |
Цитата:
var result = JSON.parse(xmlhttp.responseText); alert(result.class_name); // должно работать |
Часовой пояс GMT +3, время: 08:16. |