如何使用异步函数将JSON数据集分配给var

时间:2014-06-15 13:02:11

标签: javascript ajax json asynchronous

我遇到了问题,我编写了一个很好的函数,它从我服务器上的本地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);

1 个答案:

答案 0 :(得分:0)

我建议你promise-based asynchronous pattern

也就是说,您提供一个对象作为返回值fetchData,允许您订阅异步操作进度:

fetchData().done(function(data) {
  // Do stuff when async operation completed successfully
});

jQuery has a decent implementation for this pattern.