jQuery延迟对象

时间:2012-12-27 23:35:32

标签: javascript jquery deferred

我很难在jQuery中绕过延迟对象。

E.G,

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

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

checkFoo是一个像这样的AJAX调用

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

4 个答案:

答案 0 :(得分:4)

这很糟糕:

.success( step1(), step2() )

这将传递执行step1()step2()作为参数的结果。

但这很好!

.success( step1, step2 )

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

答案 1 :(得分:2)

你使用的方式错误..

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

所以试试

checkFoo(widget)
.success( function(){
    step1(); 
    step2();
})
.fail( function(){
    alert("checkfoo failed");
});

答案 2 :(得分:2)

您的代码

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

立即调用 step1step2以及alert ,并将其返回值传递到successfail方法。完全像

foo(bar());

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

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

checkFoo(widget)
.success( step1, step2 )      // <== No parens, `step1` refers to a *function*
.fail( function() {           // <== Wrap a function around the alert
    alert("checkfoo failed");
});

答案 3 :(得分:0)

我想您可能希望将函数表达式传递给fail

.fail(function() {

});