繁体   English   中英

处理jQuery deferred.done被调用,即使请求被中止吗?

[英]Handling jQuery deferred.done being called even though request is aborted?

我正在编写一个对Web服务进行http调用,获取一些数据并基于此数据调用另一个函数的函数。 如果服务关闭,则不应调用第二个函数。 我认为这样做的明显方法是写$.when(func1()).done(func2); 但这将触发func2,即使请求中止也是如此。 我意识到我可以通过在func1的$.getJSON方法的成功函数中调用func2来解决该问题,但我想尽可能使用延迟语法。 谁能建议如何以与延迟对象语法一致的方式处理此问题?

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);
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM