处理 jQuery deferred.done 被调用,即使请求被中止
Handling jQuery deferred.done being called even though request is aborted?
我正在编写一个函数,该函数对Web服务进行http调用,获取一些数据并根据此数据调用另一个函数。如果服务关闭,则不应调用第二个函数。我认为这样做的明显方法是编写$.when(func1()).done(func2);
但即使请求中止,这也会触发 func2。我意识到我可以通过在 func2 的成功函数中调用 func1 $.getJSON
来做一个解决方法,但如果可能的话,我想使用延迟语法。任何人都可以建议如何以与延迟对象语法一致的方式处理这个问题吗?
function checker() {
console.log("in checker");
$.getJSON("http://djdjdjdjdjinvalidUrl.dkdkdk", function(data) {
console.log("in success function");
});
}
function crosser(data) {
console.log("in crosser");
}
$(document).ready(function(){
$.when(checker()).done(crosser);
});
参见 jsFiddle 获取一个实时示例。
你需要从checker
返回一个承诺
function checker() {
console.log("in checker");
return $.getJSON("http://djdjdjdjdjinvalidUrl.dkdkdk", function(data) {
console.log("in success function");
});
}
演示:小提琴
也无需使用$.when()
$(document).ready(function(){
checker().done(crosser);
});
演示:小提琴
对于像 $.getJSON
这样的异步事件,您需要使用实际的延迟对象。我已经用正在使用的这个对象更新了你的 jsfiddle:http://jsfiddle.net/wM7aP/1/
法典:
function checker() {
var dfd = new jQuery.Deferred();
console.log("in checker");
$.getJSON("http://djdjdjdjdjinvalidUrl.dkdkdk", function(data) {
//handle data here
dfd.resolve( "hurray" );
});
return dfd.promise();
}
function crosser(data) {
console.log("in crosser");
}
$(document).ready(function(){
$.when(checker()).done(crosser);
});
相关文章:
- node.js请求数据事件未在CORS ajax调用中触发
- BrowserId登录请求在文档加载时被调用
- 成功回调永远不会被JSONP请求调用
- Ajax调用返回当前html页面,而不是请求的文件
- 当在文档中拖动mouseup/mouseleve时,我想调用我的Ajax请求
- AJAX 请求调用以错误结尾
- 使用get/put/delete方法从ajax请求调用laravel-controler
- 使用 json 从 ajax 请求调用的文件中获取值
- 在 chai 测试中未由请求调用回调
- Sencha Touch Ajax 请求调用了两次
- 在摩卡中使用请求调用测试函数
- Node.js依赖的API请求调用使用async.waterfall,并将JSON响应与undercore.extend
- 如何通过点击HTML按钮通过POST请求调用JSON
- 如何路由到post请求中的页面,post请求本身是通过XHR请求调用的
- 通过Ajax请求调用页面时出现JavaScript错误
- 如何循环请求-承诺API请求调用
- Ajax调用防止大量请求调用
- 对主干保存请求调用成功回调
- 节点express请求调用内部get
- 在通过post请求调用的文件中执行javascript