这可能真的很愚蠢,但是我找不到我的代码的问题。它获取一个返回json的URL,然后该函数应返回一个字符串:
function getit() {
var ws_url = 'example.com/test.js';
var user = false;
$.getJSON(ws_url, function(data) {
alert('user '+data.user);//shows john
user = data.user || false;
});
return user;//should return john but returns false
}
test.js将具有以下内容:
{"id":"12","username":"ses","user":"john","error":""}
或像这样:
{"error":"123"}
我也尝试过
if (data.user) {} else {}
,但是也没有用。那我想念什么?
谢谢 :)
最佳答案
问题来自$.getJSON()
调用是异步的。触发ajax请求后,继续在getit()
内部进行处理,并且您的函数立即返回false。稍后,Ajax响应将返回并设置user
,但是您的getit()
函数return
早就开始了!
您可以使用async
选项强制Ajax调用同步,如下所示:
$.ajax({
async: false,
url: ws_url,
type: "GET",
success: function(data) {
alert('user '+data.user);//shows john
user = data.user || false;
}
});
如果这样做,您的浏览器将阻止脚本,直到Ajax调用返回。通常这不是理想的行为(这就是为什么默认设置为
async: true
的原因),所以我建议对称为getit()
的内容进行重做,并希望它会尽可能处理其结果,也许可以通过传递其自己的回调函数到getit()
,然后在完成getit()
后执行。