2012-01-11 36 views
1

我有一個小的jQuery這裏:爲什麼「完成」或「失敗」的jQuery AJAX回調在HTTP 500上執行?

$.ajax({ 
    url: $this.fileUploadUrl, 
    data: 'url=' + encodeURIComponent(file.name), 
    type: 'POST', 
    done: function() { 
     file.status = plupload.DONE; 
     $this.updateFileStatus(file); 
    }, 
    fail: function() { 
     file.status = plupload.FAILED; 
     $this.updateFileStatus(file); 
    } 
}); 

如果服務器返回一個HTTP 500響應,fail回調不運行,而且也不done。我甚至嘗試加入always,這也不起作用。我錯過了什麼?

回答

5

什麼是donefailThe documentation不會列出它們。

(他們jqXHR對象成員函數,但是這是不一樣的他們是在一個看漲期權,以$.ajax()。)

也許你正在尋找分別successerror,:

$.ajax({ 
    url: $this.fileUploadUrl, 
    data: 'url=' + encodeURIComponent(file.name), 
    type: 'POST', 
    success: function(data, textStatus, jqXHR) { 
     file.status = plupload.DONE; 
     $this.updateFileStatus(file); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     file.status = plupload.FAILED; 
     $this.updateFileStatus(file); 
    } 
}); 

或者,要保留原來的術語,以下(這是不太等效但接近-ISH):

$.ajax({ 
    url: $this.fileUploadUrl, 
    data: 'url=' + encodeURIComponent(file.name), 
    type: 'POST' 
}).done(function() { 
    file.status = plupload.DONE; 
    $this.updateFileStatus(file); 
}).fail(function() { 
    file.status = plupload.FAILED; 
    $this.updateFileStatus(file); 
}); 
+3

啊,我看了文檔錯了。我看到「Deprecation Notice:jqXHR.success(),jqXHR.error()和jqXHR.complete()回調將在jQuery 1.8中被棄用,爲了準備好你的代碼的最終刪除,使用jqXHR.done(),jqXHR .fail()和jqXHR.always()來代替。「......他們是否打算廢棄成功並在'ajax'方法中失敗,並鼓勵我們使用jqXHR方法? – 2012-01-11 22:36:38

+0

@JakePetroules他們爲什麼會這樣?這是[半穩定的API和封裝的光輝]。'ajax'函數只需要一個對象就能夠獲得「命名參數」。 – 2012-01-11 22:38:39

2
var request = $.ajax({ 
    url: $this.fileUploadUrl, 
    type: "POST", 
    data: 'url=' + encodeURIComponent(file.name) 
}); 

request.done(function() { 
    file.status = plupload.DONE; 
    $this.updateFileStatus(file); 
}); 

request.fail(function() { 
    file.status = plupload.FAILED; 
    $this.updateFileStatus(file); 
}); 
+0

這不會引入競爭條件嗎? – 2015-09-19 12:38:03

相關問題