为什么“完成”或“失败”的jQuery AJAX回调都不能在HTTP 500上执行?

时间:2012-01-11 22:26:47

标签: jquery ajax

我在这里有一个小jQuery:

$.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,这也没有用。我错过了什么?

2 个答案:

答案 0 :(得分: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);
    }
});

或者,为了保留原来的术语,以下内容(不完全相同但是非常接近):

$.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);
});

答案 1 :(得分: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);
});