我喜欢将我的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,但也不会工作?
答案 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等时间事件)。