来自async的Javascript / jQuery:false到async:true并且仍然从外部获取数据

时间:2016-12-06 21:12:00

标签: javascript jquery

我有一些使用ajax获取数据的函数,然后我可以在需要时从函数外部获取结果数据。

以下是一个例子:

function myfunction() {

    jQuery.ajax({
        url: someurl
        method: 'GET',
        async: false,
        success: function(result) {
            myresult = result;
        }
    });

    return myresult;
};

从外面我得到的数据是这样的:

myvar = myfunction();

这样做我可以在函数外部获取数据。

我搜索了google和stackoverflow,我仍然无法理解它,所以我想添加一个我已经使用的功能可能会帮助我更好地理解如何做到这一点。

如何转换此代码,以便在将async设置为true时,我能够从函数外部获取数据?

1 个答案:

答案 0 :(得分:1)

  

如何转换此代码,以便当我将async设置为true时,我能够从函数外部获取数据?

简单回答,不要。你正以错误的方式解决问题。

您可以提供一个回调函数,而不是试图在函数外部获取数据,而是将数据传递给

function myfunction(callback) {
    $.ajax({
        url: someurl
        method: 'GET',
        success: callback
    });
};

myfunction(function(data) {
    // work with the data retrieved from the async request here...
    console.log(data);
});

注意:此模式在此示例中有点多余,因为您可以直接将匿名函数提供给success属性。在实际场景中,您可能希望在调用提供的success函数之前在callback处理程序中执行一些实际的通用逻辑。

或者,您可以从jQuery AJAX请求返回延迟对象,然后在解析对象时使用done()处理程序执行:

function myfunction() {
    return $.ajax({
        url: someurl
        method: 'GET'
    });
};

myfunction().done(function(data) {
    // work with the data retrieved from the async request here...
    console.log(data);
});

在任何一种情况下,遵循的逻辑是来自请求的数据应该提供给所需的功能,而不是全局可用。