2012-12-27 56 views
1

我有困難的時間在jQuery中圍繞延遲對象包裹我的頭。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

的成功方法在jQuery的1.8棄用。你應該使用完成而不是成功。 – Brigham

回答

2

您的代碼

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

電話step1step2alert立即,並將其返回值到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"); 
}); 
+1

謝謝T.J,這是我最終做的。我也繼續前進,改變了成功。 –

4

這這裏不好:

.success(step1(), step2()) 

這將通過執行step1()step2()作爲參數的結果。

但這裏很好!

.success(step1, step2) 

它會自行傳遞函數在稍後執行。

+0

謝謝你的提示Alex。即使在我上面的例子中我的ajax調用成功了,爲什麼失敗仍在運行? –

+0

您可能想使用'.then(success,failure)'或使用'.fail(失敗).success(成功)',我想''.success(func1,func2)'只是表示兩件事要運行時它解決。 –

+0

@JasonWells因爲_exact_同樣的問題。您正在調用'alert()',然後提供結果作爲回調。你需要傳入一個函數。 –

2

您使用的是他們走錯了路..

.success().fail()採取回調函數作爲參數..

所以儘量

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

我想你可能想傳遞一個fhnction表達爲fail

.fail(function() { 

});