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 请求失败条件的主要内容,如果未能解决你的问题,请参考以下文章