1

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

$(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 中已弃用。

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

4

2 回答 2

3

您可以将回调“外包”给普通函数,因此您可以将它放在您喜欢的某个地方:

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

还有一些你可以定义你的回调

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

这甚至可以通过对象方法实现

于 2012-08-15T10:16:46.710 回答
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 ..
}
于 2012-08-15T10:20:30.020 回答