ajax 请求失败条件

Posted

技术标签:

【中文标题】ajax 请求失败条件【英文标题】:ajax request fail condition 【发布时间】:2012-03-18 22:49:51 【问题描述】:

我好像迷路了。我有一个 jQuery 请求,通过基本身份验证发送 GET 请求。我的问题是即使身份验证失败,错误代码也永远不会运行。 我的要求:

$.ajax(
    type: type,
    url: url,
    dataType: 'json',
    beforeSend: function(xhr) 
        xhr.setRequestHeader('Authorization', 'Basic ' + btoa(window.username + ":" + window.password));
    ,
    success: callback,
    error:function()
        console.log('ERROR: ' + jqXHR.status);
    ,
    complete: function(jqXHR, textStatus) 
        console.log('VOTE: ' + jqXHR.status);
    
);

我的 JSON 响应和 Status Code 都出现错误。我做错了什么?

响应正文:


"error": 
    "code": 401,
    "message": "Authentication failed"


响应头:

Status Code: 401
Date: Wed, 29 Feb 2012 12:45:03 GMT

提前致谢

【问题讨论】:

服务器返回的状态码是什么 你在哪里定义了jqXHR? @Michel 这和我想的一样 “回调”函数定义了吗? 类型:“GET”或“POST” 【参考方案1】:
function()
    console.log('ERROR: ' + jqXHR.status);

不正确,因为变量 jqXHR 未定义,因此您在该行中遇到 javascript 异常。

试试

function(jqXHR)
    console.log('ERROR: ' + jqXHR.status);

【讨论】:

【参考方案2】:

我认为您没有定义传递给错误函数的变量。你试过了吗

error: function(jqXHR, textStatus, errorThrown)
        console.log('ERROR: ' + jqXHR.status);
    ,

在您的情况下,我认为它会运行错误函数,但由于未定义 jqXHR.status 而给出错误

【讨论】:

@Neelesh 您是在发出跨域请求还是 jsonp 请求?因为在这种情况下不会调用错误处理程序 我没有发出跨域请求。奇怪的部分是控制不去任何功能。甚至没有成功和完整。【参考方案3】:

将错误处理程序放在全局中以查看它是否有所作为(使用所有参数):

jQuery(document).ajaxError(function(event, jqXHR, ajaxSettings, errorThrown) 
    var errorMessage = "Ajax error: " + ajaxSettings.url + " : " + errorThrown + " : " + jqXHR.statusText + " : " + jqXHR.status;

    if (jqXHR.status != "0" || errorThrown != "abort") 
        alert(errorMessage);
    
);

编辑注意:全局的参数与本地化的参数略有不同

 error:function(jqXHR,textStatus,errorThrown),

也许让成功更明确?

success: function(returnedStuff)
    callback(returnedStuff);
,

【讨论】:

以上是关于ajax 请求失败条件的主要内容,如果未能解决你的问题,请参考以下文章

Gmail API 服务帐户请求 - 前提条件检查失败

Gmail REST API:400错误请求+失败的前提条件

如果 NSPredicate 失败,啥输出将返回 Fetch 请求

IIS7请求跟踪权限失败

带有跨域重定向的 Safari xhr (AJAX) 请求失败

错误代码412是啥啊?怎么解决??