我遇到了问题,我编写了一个很好的函数,它从我服务器上的本地JSON文件返回一个数据集。我希望通过将其设置为变量来使用返回的数据,以后可以将其传递给其他函数但是由于AJAX的异步性,我的变量将始终设置为undefined
,因为变量在数据集之前设置从我的功能返回。我不想在我的fetchData
函数中设置我的变量,在等待fetchData
函数时,在此处分配变量值的最佳方法是什么。我应该返回某种回调,还是需要某种承诺,还是应该将window.XMLHttpRequest.open
的异步参数设置为false
?
'use strict';
function fetchData() {
var prodData;
if (window.XMLHttpRequest) {
prodData = new XMLHttpRequest();
prodData.overrideMimeType('application/json');
prodData.open('GET', 'products.json', true);
prodData.send();
prodData.onreadystatechange = function () {
if (prodData.readyState === 4 && prodData.status === 200) {
return prodData.responseText;
} else {
return false;
}
};
}
}
var myData = fetchData();
// later I shall use this data like so...
doSomethingWithMyData(myData);
答案 0 :(得分:0)
我建议你promise-based asynchronous pattern。
也就是说,您提供一个对象作为返回值fetchData
,允许您订阅异步操作进度:
fetchData().done(function(data) {
// Do stuff when async operation completed successfully
});