1

我有一个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 请求标头以检查到达的内容。

4

0 回答 0