3

我正在使用 PhoneGap 构建一个 Android 应用程序。使用 jQuery 或 Zepto,我可以使用 $.ajax 调用来调用网站 API。但是,当网站返回 401(未经授权)响应时,似乎没有来自 ajax 调用的回调——“成功”、“错误”或“完成”都没有被调用。

请注意,当响应为 200 或 500 时,相同的代码可以正常工作。

我将 Zepto 1.0rc1 和/或 jQuery 1.7.2 与 PhoneGap 1.6.1 一起使用。

function make_base_auth(user, password) {
    var tok = user + ':' + password;
    var hash = btoa(tok);
    return "Basic " + hash;
}

$('#button').on('touchstart', function() {
    console.log("UPLOAD --- ");
    $.ajax({
        url: 'https://mywebsite/api/v1.0/test/?ts=' + new Date().getTime(),
        type: 'GET',
        beforeSend: function (xhr){ 
            xhr.setRequestHeader('Authorization', make_base_auth('username', 'password')); 
        },
        success: function(data, status, xhr) {
            console.log("AJAX: SUCCESS: " + data);
            $('h1').text("AJAX!!");
        },
        error: function(xhr, errortype, error) {
            console.log("AJAX: FAIL: " + errortype + " - " + error);
            $('h1').text("AJAX FAIL");
        },
        complete: function() {
            console.log("--- Complete");
        }
    });
    return false;
});
4

2 回答 2

1

我只是有同样的问题。当我得到 HTTP 401 并使用

$.ajax({
    ...
    timeout: 5000, // Some timeout value that makes sense
    ...
});

然后使用 调用错误回调{"readyState":0,"status":0,"statusText":"timeout"}。在这种情况下,您将不得不猜测真正的错误是 HTTP 401。

或者,您可以使用

$.ajax({
    ...
    async: false, // :-(
    ...
});

你的错误回调会得到类似的东西{"readyState":4,"responseText":"<html>...</html>","status":401,"statusText":"Unauthorized"}

于 2012-10-22T19:41:02.223 回答
-2

降级phonegap。是的。你没看错。

我试过 1.4.1:没用。

我试过 1.3.0: 有效。

所以,是的,就是这样。

于 2012-05-08T18:37:33.407 回答