如何处理$ .get()中的错误

Won*_*ing 18 ajax jquery

我有一个jquery代码,我在其中使用get()并调用一些远程url /文件.现在我想知道从这里处理错误的最佳方法是什么.

我在做的是:

   $(document).ready(function() {
        $.ajaxSetup({
            error: function(x, e) {

                if (x.status == 0) {
                    alert(' Check Your Network.');
                } 
                   else if (x.status == 404) {
                alert('Requested URL not found.');

                } else if (x.status == 500) {
                    alert('Internel Server Error.');
                }  else {
                    alert('Unknow Error.\n' + x.responseText);
                }
            }
        });

        $.get("HTMLPage.htm", function(data) {
            alert(data);
            $('#mydiv').html(data);

        });
    });
Run Code Online (Sandbox Code Playgroud)

这工作正常.但是想知道有没有更好的方法呢?

参考:http://www.maheshchari.com/jquery-ajax-error-handling/

Alp*_*key 17

对所有ajax调用使用$ .ajaxSetup是全局的.因为$ .get函数没有任何错误回调,所以在$ .ajaxSetup中定义错误处理程序是处理错误的唯一方法.如果使用$ .ajax,则可以像这样在$ .ajax调用中定义错误处理程序

$.ajax({
  url: "HTMLPage.htm",
  success: function(data) {
    alert(data);
    $('#mydiv').html(data);        
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) { 
    if (XMLHttpRequest.status == 0) {
      alert(' Check Your Network.');
    } else if (XMLHttpRequest.status == 404) {
      alert('Requested URL not found.');
    } else if (XMLHttpRequest.status == 500) {
      alert('Internel Server Error.');
    }  else {
       alert('Unknow Error.\n' + XMLHttpRequest.responseText);
    }     
  }
});
Run Code Online (Sandbox Code Playgroud)

这仅适用于此ajax调用,这样您就可以获得更具体的错误消息.但是使用全局错误处理程序也可以.

你可以在$(document).ready()之外定义你的函数

$(document).ready(function() {
    $.ajaxSetup({
        error: AjaxError
    });

    $.get("HTMLPage.htm", GetSuccess);
});

function AjaxError(x, e) {
  if (x.status == 0) {
    alert(' Check Your Network.');
  } else if (x.status == 404) {
    alert('Requested URL not found.');
  } else if (x.status == 500) {
    alert('Internel Server Error.');
  }  else {
     alert('Unknow Error.\n' + x.responseText);
  }
}

function GetSuccess(data) {
  alert(data);
  $('#mydiv').html(data);
}
Run Code Online (Sandbox Code Playgroud)


jos*_*tgv 8

从jQuery 1.5开始,所有jQuery的Ajax方法都返回XMLHTTPRequest对象的超集。$ .get()返回的此jQuery XHR对象或“ jqXHR”实现Promise接口,为其提供Promise的所有属性,方法和行为。

var jqxhr = $.get( "example.php", function() {
    alert( "success" );
})
.done(function() {
    alert( "second success" );
})
.fail(function() {
    alert( "error" );
})
.always(function() {
    alert( "finished" );
});
Run Code Online (Sandbox Code Playgroud)

  • 简单明了。这应该是公认的答案! (2认同)