如何使用jQuery在JSON ajax请求中回调404上的函数?

shi*_*ara 21 javascript ajax jquery http-status-code-404

我想用JSON中的响应发出Ajax请求.所以我提出了这个Ajax请求:

$.ajax({
    url: 'http://my_url',
    dataType: "json",
    success: function(data){
      alert('success');
    },
    error: function(data){
      alert('error');
    },
    complete: function(data) {
      alert('complete')
    }})
Run Code Online (Sandbox Code Playgroud)

这段代码工作正常,但是当我的网址发送给我一个HTTP代码404时,没有使用回调,甚至是完整的回调.经过研究,这是因为我的dataType是'json'所以404返回是HTML并且JSON解析失败了.所以没有回调.

有一个解决方案,当404被引发时调用回调函数?

编辑:完成回调不调用返回是404.如果你想要一个URL机智404你可以打电话:http://twitter.com/status/user_timeline/jksqdlmjmsd.json?count = 3& callback = jsonp1269278524295&_ = 1269278536697这是这个网址我有我的问题.

Dus*_*ine 19

$.ajax({
    url: 'http://twitter.com/status/user_timeline/jksqdlmjmsd.json?count=3&callback=jsonp1269278524295&_=1269278536697',
    dataType: "json",
    success: function(data) {
        alert('success');
    },
    error: function(data) {
        alert('error');
    },
    complete: function(xhr, data) {
        if (xhr.status != 0)
             alert('success');
        else
             alert('fail');
    }
})
Run Code Online (Sandbox Code Playgroud)

  • 你的意思是:"完成:功能(状态,文字){" (4认同)

Fab*_*obs 9

使用您的配置,jQuery使用jsonp来传输数据.这可以通过动态插入脚本元素并将URL设置为指定值来实现.然后,服务器返回的数据被评估为JavaScript - 通常调用提供的回调.如果服务器返回404,则内容显然不是JavaScript,并且永远不会调用回调.某些浏览器支持脚本标记上的错误处理程序,在这些情况下会调用它们.不幸的是,IE不支持这一点.检测错误的最佳方法是依赖超时.

在您的情况下,您应该指定一个附加timeout选项,如果未及时调用回调(这将是404响应的情况),则会导致调用错误处理程序.

$.ajax({
  url: 'http://my_url',
  timeout: 2000, // 2 seconds timeout
  dataType: "json",
  success: function(data){
    alert('success');
  },
  error: function(data){
    alert('error');
  },
  complete: function(data) {
    alert('complete')
  }
});
Run Code Online (Sandbox Code Playgroud)


Pet*_*der 5

使用statusCode-选项

$.ajax({
    url: 'http://my_url',
    dataType: "json",
    statusCode: {
        404: function() {
            alert("I could not find the information you requested.");
        }
    },
    success: function(data) {
      alert('success');
    },
    error: function(data) {
      alert('error');
    },
    complete: function(data) {
      alert('complete');
    }
})
Run Code Online (Sandbox Code Playgroud)