2013-04-25 36 views
12

Như tôi đã khai báo thành công và các tùy chọn ajax lỗi, trong đó phản hồi là 204, phương thức ajax đi đến thành công tùy chọn dẫn đến lỗi.Làm thế nào để xử lý một phản ứng 204 trong jquery ajax?

Theo tài liệu chúng tôi có thể sử dụng, phương thức StatusCode hoặc Complete nhưng nhược điểm ở đây là phải khai báo tất cả các mã trạng thái như 2 ?? series, 3 ?? series, 4 ?? loạt! Vì các phản hồi này là động và tôi không chắc chắn về mã trạng thái http.

Vì vậy, cách nào tốt hơn để xử lý mã trạng thái http trong jquery ajax?

Trả lời

13

Đối tượng jqXHR được trả về bởi $ .ajax() như của jQuery 1.5 triển khai giao diện Promise. Đối số thứ ba trong hàm đã hoàn thành là một đối tượng jqXHR. Đối tượng này có thuộc tính cho mã trạng thái http của kết quả.

jqXHR.done (hàm (dữ liệu, textStatus, jqXHR) {}); Thay thế xây dựng tùy chọn gọi lại thành công, phương thức .done() thay thế phương thức jqXHR.success() không dùng nữa. Tham khảo deferred.done() cho chi tiết triển khai. link

$.ajax({ 
     url: "http://fiddle.jshell.net/favicon.png", 
     beforeSend: function (xhr) { 
      xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
     } 
    }).done(function (data, textStatus, jqXHR) { 
     console.log(jqXHR.status); //handle your 204 or other status codes here 
    }); 

Fiddle http://jsfiddle.net/puleos/fVa7X/

Giả sử bạn muốn đối xử với tất cả 200 mã trạng thái phi như một lỗi bạn có thể làm một cái gì đó như thế này:

var p = $.ajax({ 
      url: "http://fiddle.jshell.net/favicon.png", 
      beforeSend: function (xhr) { 
      xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
      } 
     }); 

p.done(function(data, textStatus, jqXHR) { 
    if(jqXHR.status !== 200) { 
    handleError(jqXHR.status); 
    return; 
    } 
    // Normal processing here 
}); 

p.fail(function(jqXHR, textStatus) { 
    handleError(jqXHR.status); 
}); 
+0

bạn có thể giải thích cho tôi phương pháp jqXHR.done bằng bất kỳ ví dụ nào không? làm cách nào để xử lý mã trạng thái? –

+0

Tôi đã cung cấp một fiddle cho thấy cách bạn có thể kiểm tra mã trạng thái. Cách bạn xử lý nó phụ thuộc vào ngữ cảnh của ứng dụng bạn đang xây dựng. –

+0

Phương thức thực hiện ở trên có chỉ xử lý phương thức jqXHR.success() không được chấp nhận? Để xử lý lỗi, tôi có cần tạo phương thức riêng không? Bcoz Tôi đã cố gắng để chơi xung quanh jsfiddle bằng cách thay đổi URL và nó không xử lý mã lỗi! –

4

Các giải pháp trên là một đẹp nhưng đối với một người đã định nghĩa "thành công" và "lỗi" trên nhiều thành phần, điều này liên quan đến rất nhiều thay đổi mã.

Sau khi đọc trên giấy tờ, nó là khá dễ dàng để có được mã trạng thái thành công quá:

jQuery.ajax({ 
.. 
'success' : function(data,textStatus,jqXHR) { 
    if (jqXHR.status == "204") { 

    } 
}, 
error : function(jqXHR, exception) { 
     // Manage error 
    }, 

http://api.jquery.com/jquery.ajax/ => statusCode

Sau đó, để kiểm tra mã trạng thái, một jqXHR.status sẽ thực hiện thủ thuật

Các vấn đề liên quan