jQuery AJAX捕获状态代码错误

时间:2017-01-16 19:37:31

标签: javascript jquery ajax

我正在尝试使用jQuery的$ .ajax捕获特定的响应错误。

如果有500或404错误代码,而不是运行状态代码函数,它会运行错误函数,我会得到一个警告框而不是应该发生的错误代码

这是我的代码看起来像

// get page data
getPageData: function(url, callback) {

    url = ajaxLoader.getURL(url);

    $.ajax({
        url: url,
        type: 'get',
        data: {_ajax_loader: 1},
        error: function(xhr, status) {
            alert('There was a problem loading that page. You may need to refresh.');
        },
        statusCode: {
                404: function(response) {
                    ajaxLoader.fetchPage('/missing');
                },
                500: function(response) {
                    ajaxLoader.fetchPage('/error'); 
                }
            }           
    }).done(callback);
},

3 个答案:

答案 0 :(得分:5)

这是设计的。服务器返回错误时执行error。此外,statusCode中定义的函数也是called。这同样适用于completesuccess处理程序。

您可以修改错误处理程序,以便在statusCode中定义错误代码时不运行。

$.ajax({
    url: '/echo',
    type: 'get',
    success: function() {
        console.log('ajax.success');
    },
    error: function(xhr, status) {
        // check if xhr.status is defined in $.ajax.statusCode
        // if true, return false to stop this function
        if (typeof this.statusCode[xhr.status] != 'undefined') {
            return false;
        }
        // else continue
        console.log('ajax.error');
    },
    statusCode: {
        404: function(response) {
            console.log('ajax.statusCode: 404');
        },
        500: function(response) {
            console.log('ajax.statusCode: 500');
        }
    }
});

Demo

答案 1 :(得分:-2)

它将执行arm64和适当的error函数。

你的代码唯一的问题是在你的StatusCode函数中,你有StatusCode的参数(我假设是成功函数的参数),它应该与错误函数参数匹配,如下所示:

response

这样,如果收到404或500,则// get page data getPageData: function(url, callback) { url = ajaxLoader.getURL(url); $.ajax({ url: url, type: 'get', data: {_ajax_loader: 1}, error: function(xhr, status) { alert('There was a problem loading that page. You may need to refresh.'); }, statusCode: { 404: function(xhr, status) { ajaxLoader.fetchPage('/missing'); }, 500: function(xhr, status) { ajaxLoader.fetchPage('/error'); } } }).done(callback); }, 函数和error函数都将执行。如果您希望仅执行404/500函数,并且404/500函数仅在返回的状态不是404或500时执行,则可以按如下方式执行:

error

答案 2 :(得分:-2)

$ .ajax有successerror个函数,因此您可以使用jqXHR为两者定义处理它。

成功:

success: function(data, status, jqXHR) {
        switch(jqXHR.status){
           case 200:
                    //status ok
                    break;
           case 206:
                    //Partial Content
                    //awesome code for handle it
                    break;

        }
    }

出错:

error: function(jqXHR, status, errorThrown) {
        switch(jqXHR.status){
           case 400:
                    //Bad Request
                    //awesome code for handle it
                    break;
           case 404:
                    //Not Found
                    //awesome code for handle it
                    break;

        }
    }

此处所有status codes