我正在开发一个自制API的客户端,但在设置授权头部信息(Authorization header)方面遇到了严重困难。我使用JQuery进行Ajax请求,但'beforeSend'根本不起作用(使用fiddler检查请求)。
这是我的beforeSend代码:
$.ajax({
type: "GET",
url: url+"/Projects",
contentType: "application/json; charset=utf-8",
beforeSend: function (req) {
req.setRequestHeader("Authorization", AuthBuilder(username, password));
},
success: function (result) {
alert("success");
},
error: function (xhr, ajaxOptions, thrownError) {
alert("fail");
}
});
如果失败了怎么办?返回旧的方式发送ajax请求...但这也不起作用...
以下是我通常的代码:
function GET(address, callback, error) {
Request = getXMLHttpObject();
Request.open("GET", url + address, true);
var base64 = Base64.encode(username + ":" + password);
alert(base64);
Request.setRequestHeader("Authorization", "Basic " + base64);
Request.send();
Request.onreadystatechange = function () {
//alert(Request.readyState+" code "+Request.status);
if (Request.readyState == 4 && Request.status == 200) {
callback(jQuery.parseJSON(Request.responseText));
} else if (Request.readyState == 4 && Request.status >= 400) {
error(Request.status, Request.statusText);
}
}
}
不要介意我没有特别要求返回json,因为服务默认返回json。其他信息如下:
- 源不重要,服务允许所有来源(已经测试和确认)
- 当通过头设置时,授权有效(在其他客户端中测试过)
- 授权标头只是未发送
- AuthBuilder(用户名,密码))给出了基本授权标头内容的正确格式
- getXMLHttpObject()只是一些复制粘贴的代码,在此之前可以正常工作