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 ..
}