我使用xhr.setRequestHeader
在jQuery中使用beforeSend
设置身份验证。代码是这样的:
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', 'Basic ' + btoa(app.username + ':' + app.password));
}
这里没有什么花哨的东西,但是让我们说提供的密码不正确,那么我的身份验证失败了......如何抓住错误呢?
似乎beforeSend
或xhr.setRequestHeader
没有回调函数,任何人都有解决方案或者写了一些东西来做这件事?
编辑:
这是代码的其余部分
success: function(rows) {
// everything is fine here when I provide correct username/password
},
error: function(responseData, textStatus, errorThrown) {
console.warn(responseData);
console.warn(textStatus);
console.warn(errorThrown);
// nothing shows up in the console when I provide a bad username/password
}
编辑2:
所以,事情是XHR永远不会失败,因为没有控制服务器端!身份验证成功与否,呼叫已成功,并返回readyState
4和status
200.如果没有显示错误,则说明我无法显示的原因!
答案 0 :(得分:2)
首先,xhr.setRequestHeader()
只是为请求添加了一些标头。它实际上并没有发送它,因此在您的其他XHR代码实际发送请求之前,密码将不会被验证。因此,在设置标题时不会出现故障。
如果密码错误,则XHR响应/状态是将错误传回给您的位置。 XHR调用将失败并且(取决于服务器端实现),您将获得指示错误的状态代码或指示错误的特定响应。
您可以使用onreadystatechange
事件处理程序查看响应。
如果您需要进一步的帮助,请添加其余代码,以便发送和处理此问题的ajax调用,以便我们更具体地提供建议。