Странное поведение JSON, область действия переменной javascript - PullRequest
1 голос
/ 17 февраля 2011

У меня есть массив в переменной php с именем $ result.

Когда я делаю echo json_encode($result);, я получаю:

[{"id":"4","rank":"adm","title":"title 1"},
{"id":"2","rank":"mod",,"title":"title 2"},
{"id":"5","rank":"das","title":"title 3"},
{"id":"1","rank":"usr""title":"title 4"},
{"id":"3","rank":"ref","title":"title 5"}]

Однако я получаю другой результат, когда пытаюсь получить то же самое, используя оповещение. Вот пример.

<script type="text/javascript">
//<![CDATA[
$(document).ready(function() { myArray = <?=json_encode($result);?>; });
$('img.delete').click(function() { alert(myArray); }
//]]>
</script>

Предупреждение, которое я получаю: [object Object],[object Object], ...

Я не уверен, но похоже, что переменная myArray неправильно переносится в $('img.delete').click(function().

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Мне кажется, что у вас есть массив объектов, в JS я бы сказал, что вам нужно пройти через объекты и прочитать переменные внутри них, так как предупреждение не отображает содержимое объекта на том, что вы 'мы попросили показать, что находится в массиве - то есть: и массив объектов.

Я бы сохранил массив в переменную и прошел через массив, а затем вывел массив, содержащийся внутри каждого.

хм ... вроде как:

for(i = 0; i < myArray.length; i++) {
 // access each sub object and collate the info you want to display
 // ie: myArray[i]['id']
}

Возможно, я слишком упростил это , но я помню, что у меня были те же проблемы с приложением ajax, которое я создал ия уверен, что так я и поступил.

1 голос
/ 17 февраля 2011

Invoking alert(myArray) не дает вам представление ваших данных в формате json.Функция alert() вызывает toString() в своем аргументе.И реализация по умолчанию toString() объекта javascript просто возвращает строку "[object Object]".

Если вы хотите отобразить представление JSON, вы можете использовать библиотеку сериализации json для генерации строки json. Эта страница объясняет пример.

0 голосов
/ 17 февраля 2011

Что вы ожидаете?

Попробуйте echo array("1" => 1, "2" => 2); в php и посмотрите, что вы получите.

myArray - это объект javascript, а не строка, которую вы можете легко вывести.Если вы хотите вывести определенное значение, напишите alert(myArray[0]['id']);

Другая вещь - переменная область действия .Вы должны объявить myArray глобальным, если хотите использовать его в различных замыканиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...