我有一个phonegap应用程序。我查询需要HTTP基本身份验证的REST Web服务
这是我的代码:
var username = 'test';
var pass = 'test';
var string = username+':'+pass;
var hash = btoa(string);
$.ajax({
type: 'GET',
dataType: 'jsonp',
crossdomain: true,
//tried this
beforeSend: function (xhr){
xhr.setRequestHeader('Authorization', make_base_auth(username, pass));
},
//also this
username: 'test',
password: 'test',
//also this
data: {username: 'test', password: 'test'},
//and this
url: 'http://'+username+':'+pass+'@testserver.local/ProductService/getProductList.json?testQuery&_jsonp=availableProducts',
error: function (xhr, ajaxOptions, thrownError) {
console.warn(xhr.status);
console.warn(thrownError);
alert(xhr.status);
alert(thrownError);
}
});
function make_base_auth(user, password) {
var tok = user + ':' + password;
var hash = btoa(tok);
alert("HASH: "+hash);
return "Basic " + hash;
}
我从服务器端知道的是,当我从Android 4.x查询时,apache说“用户尝试登录时没有凭据”。所以似乎没有数据到达服务器,但为什么呢?
奇怪的是,它适用于iPhone(iOS 4.1)和Android版本2.2和2.3,但不适用于4.x(4.0.4和4.1)。任何人都有任何提示,这让我发疯。
编辑:我能够查看apache访问日志,它在Android 4.x的每个请求中返回401,对于2.2和2.3之前的每个请求都返回200。我现在将记录所有HTTP请求标头以检查到达的内容。