1

我正在编写一个函数,该函数对 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以获取实时示例。

4

2 回答 2

7

你需要从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);
});

演示:小提琴

于 2013-09-11T12:55:18.753 回答
0

对于异步事件之类$.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);
});
于 2013-09-11T13:00:15.820 回答