Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从成功回调中提取ajax响应数据_Javascript_Ajax_Jquery - Fatal编程技术网

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

Javascript 如何从成功回调中提取ajax响应数据,javascript,ajax,jquery,Javascript,Ajax,Jquery,对不起,如果这是一个重复,但我无法找到任何满意的答案在以前的职位 $(function() { $.ajax({ url: 'ajax/test.html', success: function(data) { // Data received here } }); }); [或] 上面的代码工作得很好。但是,这个ajax请求是在页面加载时发出的,我希望稍后处理这些数据。我知道我可以在回调中包含处理逻辑,但

对不起,如果这是一个重复,但我无法找到任何满意的答案在以前的职位

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

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

在上述两种方式中,“数据”都被限制在success回调或done回调中,如果可能的话,我希望在这些回调之外访问它。这在以前使用jQuery'async:false'标志时是可能的,但在jQuery 1.8中不推荐使用

如有任何建议,我们将不胜感激。谢谢。

您可以将回调“外包”到一个普通函数,这样您就可以把它放在某个地方,您喜欢它:

$(function() {
    $.ajax({
        url: 'ajax/test.html',
        success: yourOwnCallback
    });
});
您还可以在其他地方定义回调

function yourOwnCallback(data) {
  // Data received and processed here
}
这甚至可以通过对象方法实现

您可以将回调“外包”到普通函数中,这样您就可以将它放在您喜欢的地方:

$(function() {
    $.ajax({
        url: 'ajax/test.html',
        success: yourOwnCallback
    });
});
您还可以在其他地方定义回调

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

这甚至在对象方法中也是可能的

这个解决方案可能并不理想,但我希望它能有所帮助

  • 在回调时设置变量
  • 在需要处理数据的地方,检查变量是否已设置,如果未设置,则以某种方式等待
尝试:


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

  • 在回调时设置变量
  • 在需要处理数据的地方,检查变量是否已设置,如果未设置,则以某种方式等待
尝试:


您希望何时处理数据?在一些事件上,比如按下按钮?类似的事情。。。我的问题是,ajax请求是发生的第一件事,因此我必须在回调中添加剩余的应用程序逻辑[取决于数据],这一切很快就会变得一团糟。您想什么时候处理数据?在一些事件上,比如按下按钮?类似的事情。。。我的问题是,ajax请求是发生的第一件事,因此我必须在回调中添加剩余的应用程序逻辑[取决于数据],这一切很快就会变得一团糟。谢谢。。。不过,等待是最难的部分。:)@Sparda:不幸的是,JavaScript没有真正的阻塞睡眠功能,因此您必须将代码封装在一个函数中,并继续使用setTimeout:/您也可以使用它,但我认为这不会更容易。@Sparda:希望它能有所帮助。可惜JavaScript不让我们轻松地完成这些事情。谢谢。。。不过,等待是最难的部分。:)@Sparda:不幸的是,JavaScript没有真正的阻塞睡眠功能,因此您必须将代码封装在一个函数中,并继续使用setTimeout:/您也可以使用它,但我认为这不会更容易。@Sparda:希望它能有所帮助。遗憾的是,JavaScript不允许我们轻松地完成这些事情。请注意ajax文档中的弃用通知:
弃用通知:jqXHR.success()、jqXHR.error()和jqXHR.complete()回调在jQuery 1.8中将被弃用。要准备代码以便最终删除,请改用jqXHR.done()、jqXHR.fail()和jqXHR.always()。
我认为使用
.done
成功更可取。
。与
success
不同,
.done
方法链接到ajax调用。感谢Francois的建议。请注意ajax文档中的弃用通知:
弃用通知:jqXHR.success()、jqXHR.error()和jqXHR.complete()回调将在jQuery 1.8中弃用。要准备代码以便最终删除,请改用jqXHR.done()、jqXHR.fail()和jqXHR.always()。
我认为使用
.done
成功更可取。
。与
success
不同,
.done
方法链接到ajax调用。感谢Francois的建议。
someFunction(){
    if(myVar==false){
        setTimeout(someFunction(),100); //try again in 100ms
        return;
    }
.. do some other stuff ..
}