1

我很难将我的头脑围绕在 jQuery 中的延迟对象上。

例如,

我以为我可以使用以下语法,但这实际上是在成功发生时同时运行成功和失败。我认为只有在 ajax 调用失败时才会运行失败?

checkFoo(widget)
.success(step1, step2)
.fail(alert("failed"));

checkFoo 是这样的 AJAX 调用

function checkFoo(widget){
   return $.ajax({
          url: "foo.php",
          data: widget,
          format: json
   });
}
4

4 回答 4

4

这很糟糕:

.success( step1(), step2() )

这将传递执行结果step1()step2()as 参数。

但是这里很好!

.success( step1, step2 )

它会将函数本身传递给稍后执行。

于 2012-12-27T23:38:34.803 回答
2

您以错误的方式使用它们..

.success()并将.fail()回调函数作为参数..

所以试试

checkFoo(widget)
.success( function(){
    step1(); 
    step2();
})
.fail( function(){
    alert("checkfoo failed");
});
于 2012-12-27T23:39:35.443 回答
2

你的代码

checkFoo(widget)
.success( step1(), step2() )
.fail( alert("checkfoo failed") );

立即调用step1and step2,并将它们的返回值传递给or方法。完全一样alert successfail

foo(bar());

...调用bar并将其返回值传递给foo.

如果你想告诉 jQuery在成功时调用step1and并在失败时执行,你传入函数引用:step2alert

checkFoo(widget)
.success( step1, step2 )      // <== No parens, `step1` refers to a *function*
.fail( function() {           // <== Wrap a function around the alert
    alert("checkfoo failed");
});
于 2012-12-27T23:40:21.243 回答
0

我认为您可能希望将 fhnction 表达式传递给fail

.fail(function() {

});
于 2012-12-27T23:40:03.887 回答