2011-11-15 84 views
14

Tôi đã kiểm tra để đảm bảo các yêu cầu AJAX của tôi là thành công bằng cách làm một cái gì đó như thế này:Cách tốt nhất để kiểm tra xem yêu cầu AJAX đã thành công trong jQuery

$.post("page.php", {data: stuff}, function(data, status) { 
    if(status == "success") { 
     //Code here 
    } 
    else { 
     //Error handling stuff 
    } 
}); 

là kiểm tra tình trạng biến cách tốt nhất để đi về việc này, hoặc có cách nào tốt hơn để đảm bảo yêu cầu thực sự đã đi qua? Tôi đang xem xét yêu cầu "thành công" là yêu cầu truy cập trang mà tôi đăng lên thành công mà không có thời gian chờ (nếu máy chủ ngừng hoạt động và yêu cầu AJAX được thực hiện ngay trước khi nó đi xuống làm ví dụ) hoặc trả lại bất kỳ loại lỗi 404 hoặc 500.

+4

Bạn nghĩ gì về thành công? Rằng kết nối đã được thực hiện và dữ liệu đã được trả lại, hoặc rằng kịch bản trên máy chủ của bạn thực sự đã làm những gì bạn muốn nó làm gì? Tùy thuộc vào việc sử dụng của bạn, bạn có thể cần phải kiểm tra phản ứng thực tế là tốt. – Brad

+0

Đã chỉnh sửa câu hỏi của tôi để giải thích những gì tôi xem xét thành công – Aaron

Trả lời

27

Bằng cách gọi $.post theo cách đó, bạn sẽ tự động chỉ chuyển qua chức năng success handler.

Nếu có điều gì đó trong yêu cầu sai, phương pháp này thậm chí không được thực thi.

Để có nhiều quyền kiểm soát hơn, hãy sử dụng trực tiếp $.ajax() hoặc chuyển các trình xử lý không thành công. Có thể trông giống

$.post("page.php", {data: stuff}, function(data, status) { 
    // we're fine here 
}).fail(function(err, status) { 
    // something went wrong, check err and status 
}); 

Điều tương tự sử dụng .ajax():

$.ajax({ 
    type: 'POST', 
    url: 'page.php', 
    data: stuff, 
    success: function(data) { 
    }, 
    error: function(xhr, status, error) { 
     // check status && error 
    }, 
    dataType: 'text' 
}); 

Bạn thậm chí có thể vượt qua xử lý sự kiện ajax hơn để $.ajax, như beforeSend để sửa đổi/đọc tiêu đề XHR hoặc complete để có một bộ xử lý mà cháy theo một trong hai cách (lỗi hoặc không) khi các yêu cầu kết thúc.

+0

Hoạt động tốt để xử lý lỗi các tham số bị thiếu cho tôi (phương thức .post) ... cảm ơn jAndy. –

1

jQuery xem xét "thành công" theo cách nó có trong mã nguồn, tất nhiên. Điều này không bao gồm mã trạng thái 404/500 và không phải là thời gian chờ vì không có mã trạng thái nào được trả lại trong trường hợp đó.

Bạn có thể kiểm tra chính xác khi nào nó trả "success":

// If successful, handle type chaining 
if (status >= 200 && status < 300 || status === 304) { 

... 
    // If not modified 
    if (status === 304) { 

     statusText = "notmodified"; 
... 

    // If we have data 
    } else { 

     try { 
... 
      statusText = "success"; // So: only when status code is in 
            // the range 200 <= x < 300 
... 
     } catch(e) { 
... 
      statusText = "parsererror"; 
... 
     } 
    } 
2

Tôi thích sử dụng các cuộc gọi ajax, vì nó có trình xử lý thành công rõ ràng

$.ajax({ 
url: "page.php", 
data: stuff, 
success: function(response){ 
console.log("success"); 
} 
}); 

tôi cũng khuyên bạn nên sử dụng firebug hoặc webkit tương tự, sau đó bạn có thể theo dõi các yêu cầu và kiểm tra các thông số!

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