我制作了一个脚本,使用 AJAX 从服务器上的文件中获取 JSON 数据,但在将其放入函数中时遇到问题。
这是我的代码:
function getJSON (file)
{
var request = AjaxRequest();
var json = "";
request.onreadystatechange = function ()
{
if(request.readyState==4 && request.status==200)
{
json = JSON.parse(request.responseText);
}
}
request.open("GET", file, false);
request.send();
return json;
}
该函数执行了我想要的所有操作,但我被告知永远不要将 false 传递给 AJAX 请求,因为会阻塞。这个功能似乎有些问题,但我不知道如何改变它。我应该改变它吗?如果是这样,怎么办?
最佳答案
您不能像这样返回它,这是一个异步操作,这意味着您的 json = JSON.parse(request.responseText)
会在服务器响应时稍后发生带有数据...返回后很长时间...相反,您可以传入一个接受数据的函数,如下所示:
function getJSON (file, callback)
{
var request = AjaxRequest();
request.onreadystatechange = function ()
{
if(request.readyState==4 && request.status==200)
{
callback(JSON.parse(request.responseText));
}
}
request.open("GET", file, false);
request.send();
}
然后你这样调用它:
getJSON("something.json", function(data) {
//use data, your json object/data
});
这样,您就可以在数据可用时使用数据,将其传递到下一个函数...这就是异步调用的行为方式。
关于javascript - AJAX函数获取JSON数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273498/