我正在编写一个函数,它对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。
答案 0 :(得分:7)
您需要从checker
function checker() {
console.log("in checker");
return $.getJSON("http://djdjdjdjdjinvalidUrl.dkdkdk", function(data) {
console.log("in success function");
});
}
演示:Fiddle
此外,无需使用$.when()
$(document).ready(function(){
checker().done(crosser);
});
演示:Fiddle
答案 1 :(得分:0)
对于$.getJSON
等异步事件,您需要使用实际的deferred object。我已使用此对象更新了您的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);
});