检查AJAX请求是否在jQuery中成功的最佳方法

时间:2011-11-15 14:37:37

标签: jquery ajax error-handling

我一直在检查以确保我的AJAX请求成功通过这样做:

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

检查状态变量是执行此操作的最佳方式,还是有更好的方法来确保请求实际执行?我正在考虑一个“成功”的请求是一个请求,它命中我正在成功发布的页面没有超时(如果服务器已经关闭,并且在它作为一个例子之前发出了一个AJAX请求)或者返回任何有点404或500错误。

3 个答案:

答案 0 :(得分:30)

通过这种方式调用$.post,您只会自动通过success handler函数。

如果请求中的某些内容出错,则此方法甚至无法执行。

要获得更多控制权,请直接使用$.ajax(),或者传入失败处理程序。这可能看起来像

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

使用.ajax()同样的事情:

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

您甚至可以将更多ajax事件处理程序传递给$.ajax,例如beforeSend来修改/读取XHR标头,或者complete以便有一个处理程序,当处理器以任何方式触发(错误与否)时请求已经完成。

答案 1 :(得分:2)

我更喜欢使用ajax调用,因为它有一个明确的成功处理程序

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

我还建议使用类似的firebug或webkit,然后你可以跟踪请求并检查参数!

答案 2 :(得分:1)

当然,jQuery认为源代码的方式是“成功的”。这不包括404/500的状态代码,也不包括超时,因为在这种情况下没有返回状态代码。

您可以检查确切的返回时间"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";
...
        }
    }