2015-07-13 69 views
-2

對於jQuery函數,使用.success()的原因是什麼?初始功能會在成功執行後執行嗎?所以當你包含.success()時,你不會執行兩次嗎?爲什麼在getJSON中使用.success()?

$.getJSON("ajax/test.json", function(data) { 
//this will execute upon success 
}) 
.success(function() { 
    //doesn't this do what the above is doing? 
}) 
+0

僅供參考,'成功( )'方法已被棄用 –

+0

我不認爲我已經看到它完成了,你有沒有看到這個地方?它可能是它在錯誤/誤解中使用 – atmd

回答

1

如果孤立地看着它,只是快樂的情景,是的:他們做同樣的事情。不管請求的結果如何,作爲$.getJSON的最終參數的回調被調用。

.success()這樣做的方式受到Promises的啓發。您可以在這裏閱讀更多關於它們的信息:https://promisesaplus.com

Promises爲編寫許多異步操作以及處理非成功方案設置了更好的界面。

您應該使用.then()而不是.success()https://api.jquery.com/deferred.then/

+0

getJSON API參考(http://api.jquery.com/jquery.getjson/)也指向.done(),.fail(),.always()但爲JSONP。我沒有使用JSONP。但上述方法仍然有效。如果我用getJSON()方法使用它們,這是一個問題嗎?順便說一句,他們沒有提到。 – 4thSpace

+0

getJSON返回一個延遲,並且它支持.then():https://api.jquery.com/category/deferred-object/,但是.done()和.fail()完全適合! – franciscod

1

在這種情況下,你不需要成功函數,你已經定義了一個函數來成功執行。

0

你可以看到當你的要求是succesfull.You可以在控制檯之類的東西看到一條消息......我不知道

1

他們被設計爲在每種情況下都執行一個功能。成功案例,錯誤案例和始終執行的常規功能。

但是由於stated herehere.success()已被棄用。請參閱:

棄用聲明:從jQuery 1.8開始,棄用jqXHR.success(),jqXHR.error()和jqXHR.complete()回調。要準備代碼以便最終刪除它們,請改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

使用這種方法,你有一個函數在成功的情況下執行,另一個在出現故障的情況下執行,並且最後一節在執行任一種情況下:

// Assign handlers immediately after making the request, 
// and remember the jqXHR object for this request 
var jqxhr = $.ajax("example.php") 
    .done(function() { 
     alert("success"); 
    }) 
    .fail(function() { 
     alert("error"); 
    }) 
    .always(function() { 
     alert("complete"); 
    }); 

// Perform other work here ... 
// Set another completion function for the request above 
jqxhr.always(function() { 
alert("second complete"); 
}); 
相關問題