2010-10-31 49 views
49

Nhờ StackOverflow, tôi quản lý để có được mã sau đây hoạt động hoàn hảo, nhưng tôi có một câu hỏi tiếp theo.jQuery .get chức năng phản hồi lỗi?

$.get('http://example.com/page/2/', function(data){ 
    $(data).find('#reviews .card').appendTo('#reviews'); 
}); 

Mã này ở trên cho phép trang web của tôi tìm nạp trang thứ hai của bài viết có nút Tải thêm trong WordPress. Tuy nhiên, khi trang web hết trang/kết quả, tôi đang gặp sự cố nhỏ. Nút tải thêm vẫn được giữ nguyên. Nó sẽ tiếp tục cố gắng tìm nạp dữ liệu ngay cả khi không còn trang nào.

Làm cách nào để tinh chỉnh lệnh này để tôi có thể hiển thị phản hồi trực quan nếu yêu cầu .get không thành công hoặc là trang 404 (không tìm thấy)?

Nếu ai đó có thể giúp tôi với một ví dụ đơn giản về số alert("woops!");, điều đó thật tuyệt vời!

Cảm ơn!

+0

$ .ajaxSetup Chức năng Làm việc giống như nét duyên dáng, lựa chọn tốt nhất của mình với $ nhận được - http://stackoverflow.com/questions/2175756/how-to-handle-error-in-get – BetaCoder

Trả lời

133

$.get không cho bạn cơ hội thiết lập trình xử lý lỗi. Bạn sẽ cần phải sử dụng ở mức độ thấp $.ajax chức năng thay vì:

$.ajax({ 
    url: 'http://example.com/page/2/', 
    type: 'GET', 
    success: function(data){ 
     $(data).find('#reviews .card').appendTo('#reviews'); 
    }, 
    error: function(data) { 
     alert('woops!'); //or whatever 
    } 
}); 

Sửa tháng '10

Lưu ý rằng với các đối tượng mới jqXHR trong jQuery 1.5, bạn có thể đặt một trình xử lý lỗi sau khi gọi $.get:

$.get('http://example.com/page/2/', function(data){ 
    $(data).find('#reviews .card').appendTo('#reviews'); 
}).fail(function() { 
    alert('woops'); // or whatever 
}); 
+0

Bạn không phải làm điều này, có các lựa chọn thay thế khác với '$ .ajaxSetup()' và sự kiện toàn cục 'ajaxError'. –

+0

Thực tế là có. – lonesomeday

+0

giải pháp này trực quan hơn –

30

Nếu bạn muốn lỗi chung bạn có thể thiết lập tất cả $.ajax() (mà $.get() sử dụng bên dưới) yêu cầu jQuery làm để hiển thị một lỗi sử dụng $.ajaxSetup(), ví dụ:

$.ajaxSetup({ 
    error: function(xhr, status, error) { 
    alert("An AJAX error occured: " + status + "\nError: " + error); 
    } 
}); 

Chỉ cần chạy này một lần trước khi thực hiện bất kỳ cuộc gọi AJAX (không thay đổi mã hiện tại của bạn, chỉ cần dính này trước nơi nào đó) . Điều này đặt tùy chọn error thành cho hàm xử lý/chức năng ở trên, nếu bạn thực hiện cuộc gọi đầy đủ $.ajax() và chỉ định trình xử lý error thì những gì bạn đã ghi đè lên ở trên.

+0

Không hoạt động, tôi nhận được thông báo này: Đã xảy ra lỗi AJAX: lỗi Lỗi: –

11

Bạn có thể gặp lỗi chi tiết bằng cách sử dụng thuộc tính responseText.

$.ajaxSetup({ 
error: function(xhr, status, error) { 
alert("An AJAX error occured: " + status + "\nError: " + error + "\nError detail: " + xhr.responseText); 
    } 
    }); 
+0

Cũng hoạt động với Jquery 3.1.x – keesp

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