有一个RESTful Web服务(托管通过IIS不同的服务器上),返回JSON。奇怪的是下面的NodeJS命令行测试应用(不是通过网页浏览器,而是通过命令行)工作正常,并返回JSON:AJAX请求失败jQuery中而不是在
工作的NodeJS应用:
var request = require("request");
var btoa = require("btoa");
var uname = "corp\\user.name";
var pword = "password123"
var options = {
url: "http://192.168.3.142/v1/foo?format=json",
headers: {
"Authorization": "Basic " + btoa(uname + ":" + pword)
}
};
request(options, function(err, response, body) {
console.log(body);
});
然而
OPTIONS http://192.168.3.142/v1/foo?format=json 401 (Unauthorized) jquery-1.11.0.min.js:4
XMLHttpRequest cannot load http://192.168.3.142/v1/foo?format=json. Invalid HTTP status code 401
这是来自服务器的响应报头:
具有以下AJAX请求失败AJAX代码:
$.ajaxSetup({
beforeSend: function (xhr, settings) {
var creds = {
username: "corp\\user.name",
password: "password123"
};
xhr.setRequestHeader("Authorization", "Basic " + btoa(creds.username + ":" + creds.password));
return true;
}
});
$.ajax({
type: "GET",
url: "http://192.168.3.142/v1/foo?format=json",
success: function (data, text) {
console.log(data);
}
});
UPDATE:
抛出相同401(未授权):
var creds = {
username: "corp\\user.name",
password: "password123"
};
var credentials = btoa(creds.username + ":" + creds.password);
$.ajax({
type: "GET",
dataType: "text/json",
url: "http://192.168.3.142/v1/foo?format=json",
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Basic " + credentials);
return true;
},
success: function (data, text) {
console.log(data);
}
});
将beforeSend放入$ .ajax调用中,并在没有设置参数的情况下尝试。不是计算“Basic XXXX”字符串,而是预先计算并静态传递它。我也注意到你的IP地址改变了,那是故意的吗?另外,尝试将'dataType'属性设置为'text/json' – blakev
试试这些然后回报:) – blakev
@blakev:查看更新的问题。仍然抛出“401(未授权)”和IP地址是无意的。 – fuzz