背景:我试图检索数据,使用AJAX,并将其分配给一个变量。我试图将AJAX请求设置为同步,但Firefox不会允许它。AJAX - 我如何确定收到所有数据?
问题:如何确定收到的所有数据?
function search(){
var data = [];
this.init = function(){
data = getData({"url":"/imglib/Inventory/cache/2335/VehInv.js"});
console.log(data); // Returns as 'undefined'. Possibly because of asynchronous call?
};
var d = new Date();
function getData(url){
var xhttp: new XMLHttpRequest();
var dataURL = url + '?v=' String(d.getTime());
xhttp.onreadystatechange = function(){
if(this.readyState = 4 && this.status == 200){
var r = this.responseText;
var s = r.indexOf('[') + 1;
var e = r.indexOf(']');
var jsonData = JSON.parse("[" + r.slice(s,e) + "]");
return jsonData;
}
};
xhttp.open("GET", dataURL, true);
xhttp.send();
}
};
听起来像是你可能想看看承诺:http://bluebirdjs.com/docs/getting-started.html – mherzig
@mherzig谢谢。我真的很感激这个意见。不幸的是,我将要部署这个环境需要使用纯JavaScript。 – H0nd0
或者在'ondreadystatechange'函数中移动'console.log(data)',并执行'console.log(jsonData)'。您之所以未定义它,是因为AJAX本质是异步的。从'XMLHttpRequest'文档中'async'的默认值是真的......你是否试图将它设置为'false'? 'xhttp.open('GET',dataUrl,false)' –