这可能真的很愚蠢,但我找不到我的代码的问题。它获取一个返回 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()
完成时执行该回调函数。 p>
关于javascript - 使用 $.getJSON 获取 url 并正确解析它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657369/