2011-01-14 30 views
13

Làm thế nào để bạn gặp lỗi Máy chủ hoặc trang 404 không tìm thấy, khi bạn sử dụng $ .get hoặc $ .post?

Ví dụ:

$.post("/myhandler", { value: 1 }, function(data) { 
    alert(data); 
}); 

Điều đó sẽ làm hoàn toàn không có gì nếu có một Server Error tải "/ myhandler", hoặc nếu nó không được tìm thấy.

Làm cách nào để bạn thông báo cho bạn nếu có lỗi?

Trả lời

20

sử dụng error xử lý trên $.ajax()

$.ajax({ 
    url: "/myhandler", 
    data: {value: 1}, 
    type: 'post', 
    error: function(XMLHttpRequest, textStatus, errorThrown){ 
     alert('status:' + XMLHttpRequest.status + ', status text: ' + XMLHttpRequest.statusText); 
    }, 
    success: function(data){} 
}); 

demo

+6

Vì vậy, điều này không phải có thể với $ .get ? –

+0

Ditto, có thể thực hiện điều gì đó tương tự cho tải() không? –

+1

@OldGeezer bạn có thể làm điều tương tự, đọc http://api.jquery.com/load/ – Reigel

5

Những câu trả lời khác là tốt đẹp và tất cả, nhưng có giải pháp thay thế, cụ thể là .ajaxSetup, .ajaxError và xử lý sự kiện Ajax khác (kiểm tra trang tài liệu ajaxSetup để biết thêm thông tin về phần còn lại).

Ví dụ, với .ajaxError bạn có thể thiết lập một handler toàn cầu của tất cả các lỗi ajax của bạn từ .post, .get, .getJSON.ajax cho một tập hợp cụ thể của các yếu tố.

$(selector).ajaxError(function(event, xhr, ajaxOptions, errorThrown) { 
    // handle ajax error here 
}); 
33

bạn có thể làm

$.post("/myhandler", { value: 1 }, function(data) { 
    alert(data); 
}).fail(function(){ 
    // Handle error here 
}); 

thất bại sẽ được gọi nếu theres một lỗi

+5

+1 cho chức năng không thành công. nó thực hiện công việc! Bạn có thể sử dụng nó như thế này: .fail (function (e) { \t if (e.status == 404) {// ... \t} \t else {// ... \t } }); – sladda

+0

Mã cũ hơn với .error() không bắt được bất kỳ thứ gì. Đơn giản chỉ cần chuyển nó sang thất bại() đã làm các trick. –

1

Hãy thử sử dụng $.ajaxSetup(), stausCode tùy chọn

$.ajaxSetup({ 
    statusCode : { 
    // called on `$.get()` , `$.post()`, `$.ajax()` 
    // when response status code is `404` 
    404 : function (jqxhr, textStatus, errorThrown) { 
      console.log(textStatus, errorThrown); 
      } 
    } 
}); 

// $.get("/path/to/url/"); 
// $.post("/path/to/url/"); 
// $.ajax({url:"/path/to/url/"}) 
Các vấn đề liên quan