Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Передача смешанного массива из php в js (https://javascript.ru/forum/server/38367-peredacha-smeshannogo-massiva-iz-php-v-js.html)

Daiver 29.05.2013 17:47

Передача смешанного массива из 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"
Как это все превратить в чиабельную строку?
Числовые данные приходят в нормальном виде, но как с ними потом работать?
Заранее спасибо.

animhotep 29.05.2013 18:19

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")


там пробелов пару лишних, но в принципе это нормальный текст

Daiver 29.05.2013 18:33

Цитата:

Сообщение от animhotep (Сообщение 253403)
там пробелов пару лишних, но в принципе это нормальный текст

Понятно. Дстаточно просто вывести содержимое на страницу и все отобразится как надо.
А как получать доступ к значениям?
var result = xmlhttp.responseText;
alert(result.class_name); // Не работает
alert(result["class_name"]); // Не работает
alert(result[class_name]); // Не работает

Во всех трех случаях получаю undefined.

animhotep 29.05.2013 18:44

может там нет ничего)
попробуйте вывести в консоль всю переменную
console.log(result)

Daiver 29.05.2013 18:52

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"}

И как мне из этого счастья отдельные значения выуживать?

animhotep 29.05.2013 18:54

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/

Daiver 29.05.2013 19:03

Так у меня же
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 массивом с результатаим выборки из БД.

Daiver 29.05.2013 19:19

Может быть проблема в том, что в php и в js utf-8 символы занимают разное количество байт и поэтому js не видит это все как массив?
Тогда как передавать, чтобы все сработало?

Daiver 29.05.2013 21:09

Цитата:

Сообщение от animhotep (Сообщение 253413)
[JS run]
попробуйте это ещё http://api.jquery.com/jQuery.parseJSON/

Это jquery. А без этого не судьба решить проблему?
Конечно если нет другого пути, то прийдется разобраться с jquery, но желательно найти решение без него. Может даже как-то по другому, не через json.

oneguy 29.05.2013 23:11

Цитата:

Сообщение от Daiver (Сообщение 253405)
Понятно. Дстаточно просто вывести содержимое на страницу и все отобразится как надо.
А как получать доступ к значениям?
var result = xmlhttp.responseText;
alert(result.class_name); // Не работает
alert(result["class_name"]); // Не работает
alert(result[class_name]); // Не работает

Во всех трех случаях получаю undefined.

Вы забыли использовать JSON.parse для декодировки JSON на клиенте.
var result = JSON.parse(xmlhttp.responseText);
alert(result.class_name); // должно работать


Часовой пояс GMT +3, время: 04:07.