Разбор JSON ajax var - PullRequest
       1

Разбор JSON ajax var

0 голосов
/ 19 июня 2011

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

$.ajaxSetup({
type: "POST",
url: "_class/queries.php",
dataType:"json"
});

var obj;    

$.ajax({
   data: querystring,
   success: function(data){

     console.log(data);

     alert(data[0].vname);

     //obj = JSON.parse(JSON.stringify(data));

     obj = data;

     console.log(obj[0].vname);//<-- prints the expected property 
   }

 });

console.log("return "+obj);//<-- undefined?
return obj;

}

предупреждение выводит правильное значение свойства, но каким-то образом функция eval выдает ошибку pars? Я пробовал jQuery.parseJSON, но тоже не будет работать?

Ответы [ 2 ]

0 голосов
/ 19 июня 2011

Установите свойство типа $.ajax() на json:

$.ajax({
    data: querystring,
    dataType: "jsonp",
    success: function(json) {
        console.log(json);
        alert(json[0].vname);
        obj = eval("(" + json + ")");
    }
});

Из руководства:

"json": оценивает ответ как JSON и возвращает объект JavaScript. В JQuery 1.4 данные JSON анализируются в строгая манера; любой искаженный JSON отклонено и выдается ошибка разбора. (См. Json.org для получения дополнительной информации о правильное форматирование JSON.)

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

Кроме того, вызов AJAX является асинхронным - это означает, что запрос AJAX выполняется не по порядку при обычном выполнении программы. В вашем коде это означает, что в return obj; переменная obj не будет иметь того же значения, что и после вызова AJAX с данными с сервера и назначения возврата вызова eval() для obj. Решением этой проблемы является программирование на основе событий - в вашем случае вызовите функцию успеха для вызова следующего "события", которое вы хотели бы произойти, или используйте функцию AJAX для заполнения переменной (в глобальная область, предпочтительно namespaced ), для которого запрашивается другое событие (с использованием события синхронизации, такого как setInterval () ).

0 голосов
/ 19 июня 2011

Переменная json содержит уже проанализированное значение - данные, возвращаемые сервером. Зачем тебе это нужно eval это?

obj = data;

достаточно.

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