我很难在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
});
}
答案 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") );
立即调用 step1
和step2
以及alert
,并将其返回值传递到success
或fail
方法。完全像
foo(bar());
...调用bar
并将其返回值传递给foo
。
如果你想告诉jQuery成功调用step1
和step2
,并在失败时执行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() {
});