解析JSON ajax var

时间:2011-06-19 17:26:14

标签: ajax json parsing

我喜欢将我的json-Data翻译成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-function会产生一个分析错误?我试过jQuery.parseJSON,但也不会工作?

2 个答案:

答案 0 :(得分:0)

json变量包含已解析的值 - 服务器返回的数据。 为什么你需要eval呢?

obj = data;

就够了。

答案 1 :(得分:0)

$.ajax()的type属性设置为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() shouldn't be used如果可能 - 在您的情况下,除非您的JSON数据包含要执行的实际Javascript代码,否则您不需要eval()

此外,AJAX调用是异步的 - 这意味着AJAX请求是通常的程序执行的无序。在您的代码中,return obj;表示obj变量与AJAX调用返回来自服务器的数据并分配了eval()的返回值后的值不同致电obj。对此的解决方案是event-driven programming - 在您的情况下,让success函数调用您想要发生的下一个“事件”,或者使用AJAX函数来填充变量(在全局范围内,最好是{ {3}})另一个事件轮询(使用namespaced等时间事件)。