jQuery .get错误响应功能?


74

多亏了StackOverflow,我设法使以下代码完美地工作了,但是我有一个后续问题。

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

上面的代码使我的网站可以使用WordPress中的“加载更多”按钮来获取文章的第二页。但是,当网站页面/结果用完时,我遇到了一个小问题。加载更多按钮保持不变。即使没有剩余页面,它也会继续尝试获取数据。

我如何调整该命令,以便在.get请求失败或例如找不到(404)页面时显示视觉响应?

如果有人可以通过一个简单的例子帮助我 alert("woops!");那真是太棒了!

谢谢!


$ .ajaxSetup函数的工作般的魅力,其$获得最佳的选择- stackoverflow.com/questions/2175756/how-to-handle-error-in-get
BetaCoder

Answers:


182

$.get不会给您机会设置错误处理程序。您将需要改用低级$.ajax函数:

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

编辑10年3月

请注意,使用jqXHRjQuery 1.5中的新对象,您可以在调用后设置错误处理程序$.get

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

你没有做到这一点,还有其他的替代品$.ajaxSetup()ajaxError全球性事件。
尼克·克拉弗

此解决方案更加直观

失败是否包含有关失败原因的详细信息?
jjxtra

34

如果您想要一般错误,则可以设置jQuery发出的所有请求$.ajax()$.get()在下面使用)$.ajaxSetup(),以使用显示错误,例如:

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

在进行任何AJAX调用之前,只需运行一次即可(不更改当前代码,只需将其粘贴在某处即可)。这会将error选项默认设置为上述处理程序/函数,如果您进行了完整$.ajax()调用并指定了error处理程序,则您拥有的内容将覆盖上述内容。


不起作用,我收到此警报:发生AJAX错误:错误错误:
Josh Ribakoff

使用console.log代替alert(): console.log("An AJAX error occured: " + status + "\nError: " + error);
gael

13

您可以通过使用responseText属性来获取详细信息错误。

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

1

您可以链接.fail()回调以进行错误响应。

$.get('http://example.com/page/2/', function(data){ 
   $(data).find('#reviews .card').appendTo('#reviews');
})
.fail(function() {
  //Error logic
})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.