Использование JSON в Javascript - PullRequest
       52

Использование JSON в Javascript

0 голосов
/ 21 декабря 2009

Я был неправильно истолкован. Я создал объект JSON в PHP. Мне просто нужен доступ к этому объекту в Javascript. Это все.

Я только что узнал, что многие из моих проблем могут быть решены с помощью JSON. Теперь научиться использовать JSON - еще одна проблема. ; -)

Предположим, это код в PHP:

$row = array()
while ($row = mysql_fetch_object($result)
{
    $data[] = $row;
}
$javascriptFriendlyData = json_encode($data);

Теперь, как мне получить доступ к $ javascriptFriendlyData в javascript. Я пытался использовать JQuery, но я не могу понять, много ...

Если это поможет, структура данных JSON выглядит примерно так:

[{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}...

]

Ответы [ 9 ]

4 голосов
/ 21 декабря 2009

Попробуйте это:

<script>
<?php
echo 'var data = '.$javascriptFriendlyData;
?>
// now the JSON data is stored in the data variable
console.log(data);
</script>

Я предполагаю, что вы используете PHP в HTML-шаблоне здесь:

<html>
<head>
<script><?php echo 'var data = '.$javascriptFriendlyData; ?></script>
<script src="some_js_file.js"></script>
</head>
<body>

и т.д ...

В some_js_file.js теперь вы можете получить доступ к переменной data.

Если вы описываете массив простых данных, у вас нет особых оснований для eval() его, но вы все равно можете его рассмотреть.

3 голосов
/ 21 декабря 2009

С официальная документация JSON :

var myObject = eval ('(' + myJSONtext + ')');

Теперь вы можете использовать его как любой другой объект Javascript.

2 голосов
/ 21 декабря 2009

Если вы создаете данные в кодировке JSON в своем скрипте PHP и повторяете их в своем JavaScript, вам даже не нужно вызывать eval, потому что они уже в собственном формате JavaScript.

Итак, принимая ваш код ...

$row = array()
while ($row = mysql_fetch_object($result)
{
    $data[] = $row;
}
$javascriptFriendlyData = json_encode($data);

Затем в своем коде Javascript вы можете сделать что-то вроде ...

<script type="text/javascript">
var data = <?php echo $javascriptFriendlyData; ?>;
</script>

Затем, когда страница отображается, данные уже проанализированы и готовы к использованию. Это когда вы обрабатываете запросы AJAX, которые возвращают данные, которые необходимо оценить. В противном случае он ничем не отличается от использования встроенной нотации JavaScript.

например:

<script type="text/javascript">
var somevar = [{objVar1:"SomeVal"},{objVal2:"SomeVal2"}];
</script>

Если вы пытаетесь сохранить свой JavaScript в отдельном файле, вам нужно будет установить эту переменную в своем JavaScript, прежде чем загружать свой файл JavaScript или запускать файл JavaScript через интерпретатор PHP.

1 голос
/ 21 декабря 2009

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

var data = [{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}];

, который просто поместит ваши данные в переменную data Javascript.


Учитывая, что [] символизируетмассив и {} символизируют объект, вы можете использовать его для доступа к свойству title первого элемента массива data:

alert(data[0].atitle);

И вы получите

Ameya R. Kadam


И, чтобы перебрать все элементы массива data, вы можете использовать что-то вроде этого:

var i;
for (i=0 ; i<data.length ; i++) {
    alert(data[i].aid + ' : ' + data[i].atitle);
}

(Абсолютно нет необходимости в jQuery для такогозадание, кстати)

0 голосов
/ 21 декабря 2009

Стоит отметить, что некоторые браузеры теперь предоставляют набор встроенных функций для декодирования и кодирования JSON: JSON.parse () и JSON.stringify (). Они безопаснее, чем использование функции eval (), и работают только в том случае, если данные JSON правильно сформированы, тогда как eval () будет оценивать такие вещи, как:

{
  'hello': (undefined
            ? 'world'
            : ('number ' + Math.floor (40.235)))
}

Что с этим не так? Значение JavaScript «undefined» недоступно в JSON (допускаются только true, false, null, строки и числа); одинарные кавычки используются везде, когда в JSON допустимы только двойные кавычки; Вы не можете вызывать функции JavaScript или выполнять конкатенацию строк в JSON.

Очевидно, что последняя проблема представляет собой большую проблему, потому что вы можете получить какой-то вредоносный JSON, возможно, значение из формы ввода, который пытается вмешаться в дела. Поэтому, когда это возможно, используйте JSON.parse () и JSON.stringify () ... потому что eval () опасен.

Edit:

Я неправильно прочитал оригинальный пост. Если у вас есть объект JSON в PHP и вы хотите использовать его в JavaScript, вам необходимо преобразовать объект JSON в строку и передать его в JavaScript. Единственный способ сделать это - сначала заставить ваш код JavaScript запрашивать вновь созданную строку JSON. PHP будет возвращать строку, JavaScript будет использовать eval () или JSON.parse () в строке, и ваш объект будет иметь JavaScript. Я не уверен, что существует не-AJAX способ сделать это без преобразования файлов JavaScript в файлы PHP, установки заголовка Content-Type и т. Д., Но я знаю, что AJAX будет работать в этой ситуации.

0 голосов
/ 21 декабря 2009

Я обнаружил, что библиотека JSON.org Json2.js пригодится для перехода из JSON в JS и обратно из объекта JS в JSON. Например, вместо:

var obj = eval('(' + jsonString + ')');

с используемой вами библиотекой JSON.org:

var obj = JSON.parse(jsonString);

Вы также можете указать второй параметр, который позволит вам работать с результатами восстановления JSON как объекта.

Чтобы вернуться к строке JSON, просто вызовите:

var jsonString = JSON.stringify(obj);

Это также принимает необязательные аргументы, помогающие управлять созданием строки JSON.

0 голосов
/ 21 декабря 2009

JSON basicalle представляет право структуры данных, поэтому по сути это объект или экземпляр класса, поэтому для его использования необходимо сделать следующее:

var MyJSonObject = eval("(" + jSonString + ")");

UPDATE

Эй, Амит, ты не можешь получить доступ к объектам PHP из JavaScript. То, что вам нужно сделать, это как-то построить строку JSON в PHP, но затем записать ее клиенту. Я не уверен, как бы вы сделали это в PHP, но это, как вы сделали бы это в ASP. Идея та же, синтаксис в PHP будет другим.

<html>
    <head>
        <script type="text/javascript">
            var MyObject = eval("(" + <%= Response.Write(strServerSideVariable) %> + ")");
        </script>
    </head>
    <body>
    </body>
</html>

Обратите внимание, что в ASP / .NET теги "<%%>" обозначают код на стороне сервера, а не на стороне клиента. Это то, что вам нужно сделать с PHP amit

0 голосов
/ 21 декабря 2009
var arr = [{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}];

$.each(arr, function() {
    alert(this.aid)
    alert(this.atitle)
})

Или

var arr = [{"aid":"1","atitle":"Ameya R. Kadam"},{"aid":"2","atitle":"Amritpal Singh"}];

$.each(arr, function(i,o) {
    alert(o.aid)
    alert(o.atitle)
})
0 голосов
/ 21 декабря 2009

Если ваш массив находится в переменной с именем data:

$.each(data, function(){
  alert(this.aid);
  alert(this.atitle);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...