2013-02-26 165 views
-1

我試圖用承諾來同步我的Ajax請求調用來完成: 我當前的代碼是這樣的簡單:jQuery的AJAX:當請求失敗

var ajax = undefined; 

    $.ajax({ 
       type: 'put', 
       url: url, 
       data: data, 
       cache: false, 
       successs: function() { 

       }, 
       error: function() { 

       } 

      }).done(function() { 
       alert('done'); 
      }); 

這工作,只要細如Ajax調用成功(狀態碼200),但是當一個呼叫失敗時(例如trhow一個無效的url),完成不會被調用。 我如何可以執行完成,即使AJAX請求失敗=

斯特凡

+1

你可以嘗試使用'.complete'回調將執行AJAX請求是否失敗或成功。 – dakait 2013-02-26 09:14:15

+0

無論如何,你拼寫成功錯了。非常精彩。 – 2014-04-06 09:00:14

+0

我拼寫成功的地方在哪裏? – Stefan 2014-04-06 13:47:17

回答

5

一種你兩個選擇:

呼叫成功或失敗,同樣的功能。函數不具有具有爲匿名並且內聯定義,您可以分別使用名稱定義它們並相應地引用它們。

在你的代碼片段,您同時使用舊success(雖然在最後一個額外的s)和error較新done,這意味着你要定義成功(successdone兩個不同的回調)。只有一個就足夠了。

下面是使用successerror一個例子,傳遞null入處理程序上error

var ajax = undefined; 

$.ajax({ 
    type: 'put', 
    url:  url, 
    data: data, 
    cache: false, 
    success: handler, 
    error: function() { 
     handler(null); 
    } 
}); 

function handler() { 
    alert("Done"); 
} 

或者用donefail

var ajax = undefined; 

$.ajax({ 
    type: 'put', 
    url:  url, 
    data: data, 
    cache: false 
}).done(handler).fail(function() { 
    handler(null); 
}); 

function handler() { 
    alert("Done"); 
} 

可替換地(或組合),還有的complete回調(您在選項中指定的回調)和always回調(在donefail風格),這是所謂的不管成功還是失敗(成功或失敗回調完成後):

complete

var ajax = undefined; 

$.ajax({ 
    type: 'put', 
    url:  url, 
    data: data, 
    cache: false, 
    success: handler, 
    error: function() { 
     handler(null); 
    }, 
    complete: function() { 
     alert("Always called (after success/error)"); 
    } 
}); 

function handler() { 
    alert("Done"); 
} 

always

var ajax = undefined; 

$.ajax({ 
    type: 'put', 
    url:  url, 
    data: data, 
    cache: false 
}).done(handler).fail(function() { 
    handler(null); 
}).always(function() { 
    alert("Always called (after done/fail)"); 
}); 

function handler() { 
    alert("Done"); 
} 
+0

Omg你是怎麼寫的......我的+1:D – 2013-02-26 09:28:02

+0

一直是我尋找的功能。 – Stefan 2013-02-26 09:29:44

+0

@Stefan:很酷,很高興幫助!這部分內容的文檔在這裏:http://api.jquery.com/jQuery.ajax/#jqXHR – 2013-02-26 09:30:14

0

代替done功能,您可以使用complete設置:

$.ajax({ 
    type: 'put', 
    url: url, 
    data: data, 
    cache: false, 
    successs: function() { 

    }, 
    error: function() { 

    } 
    complete: function(jqXHR, textStatus) { 
     alert("Done"); 

}); 

complete功能在successerror之後執行。有關更多詳細信息,請參閱jQuery ajax文檔。

如果你不關心實際successerror回調,只想要做的事,一旦調用完成,不管結果如何,則完全省略successerror設置。

+0

要求解釋downvote可能不會引起任何迴應。 – 2013-02-26 09:30:48

+0

爲什麼downvote? – Armand 2013-04-26 12:28:41

+0

@Alison Someobdy低估了我的回答,我很好奇爲什麼。 – 2013-04-26 12:41:28

0

沒有必要做

$.ajax({ 
    type: 'post', 
    url: url, 
    data: data, 
    cache: false, 
    success: function() { 
     alert('success'); 
    }, 
    error: function() { 
     alert('error'); 
    }, 
    complete: function(){ 
     alert('complete'); 
    } 
}); 
+0

爲什麼downvote? – Armand 2013-04-26 12:26:33

+0

不記得我沒有downvote – 2013-04-26 16:07:11

+2

不,我不認爲你做過 – Armand 2013-04-26 17:05:57