1

jQuery の遅延オブジェクトに頭を悩ませています。

例えば、

以下の構文が使えると思っていたのですが、これは実際には成功時と失敗時の両方を実行しています。ajax呼び出しが失敗した場合にのみfailが実行されると思いましたか?

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") );

step1andstep2とをalert すぐに呼び出し、それらの戻り値をsuccessorfailメソッドに渡します。まさに

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");
});
于 2012-12-27T23:40:21.243 に答える
0

私はあなたが関数式をに渡したいと思うかもしれないと思いますfail

.fail(function() {

});
于 2012-12-27T23:40:03.887 に答える