如何从成功回调中提取ajax响应数据

时间:2012-08-15 09:51:29

标签: javascript ajax jquery

很抱歉,如果这是重复但我在之前的帖子中找不到任何令人满意的答案。

$(function() {
    $.ajax({
        url: 'ajax/test.html',
        success: function(data) {
            // Data received here
        }
    });
});

[或]

someFunction() {
    return $.ajax({
        // Call and receive data
    });
}

var myVariable;

someFunction().done(function(data) {
    myVariable = data;
    // Do stuff with myVariable
});

上面的代码工作得很好。但是,这个ajax请求是在页面加载时发出的,我想稍后处理这些数据。我知道我可以在回调中包含处理逻辑,但我不想这样做。由于调用的异步性质,将响应分配给全局变量也不起作用。

在上述两种方式中,'数据'被限制在成功回调或完成回调中,如果可能的话我想在这些之外访问它。以前可以使用jQuery' async:false'标志,但在jQuery 1.8中不推荐使用。

任何建议都表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:3)

你可以将回调“外包”到正常的功能,所以你可以把它放在某个地方,你喜欢它:

$(function() {
    $.ajax({
        url: 'ajax/test.html',
        success: yourOwnCallback
    });
});

除此之外,你可以定义你的回调

function yourOwnCallback(data) {
  // Data received and processed here
}

甚至可以使用对象方法

答案 1 :(得分:1)

这个解决方案可能不是主意,但我希望它有所帮助。

  • 在回调时设置变量。
  • 无论您何时需要处理数据,都要检查变量是否已设置,如果没有,请以某种方式等待。

尝试:

$(document).ready(function(){
    var myVar = false;
    $.ajax({
        url: 'ajax/test.html',
        success: function(data) {
            myVar=data;
        }
    });

    someFunction(){ //this is invoked when you need processing
        while(myVar==false){}
        ... do some other stuff ..
    }
});

或者

someFunction(){
    if(myVar==false){
        setTimeout(someFunction(),100); //try again in 100ms
        return;
    }
.. do some other stuff ..
}