Android Phonegap : $. ajax 不会触发未经授权的回调 (401)

标签 android cordova

我正在使用 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;
});

最佳答案

我刚刚遇到了同样的问题。当我返回 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"} 的信息回来。

关于Android Phonegap : $. ajax 不会触发未经授权的回调 (401),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10305181/

相关文章:

java - 导航 View 点击事件

android - Android Studio 中的 cordova-android@4.0.0 和 gradle 配置不起作用

android - 如何在谷歌Play商店上传phonegap构建应用程序?

android - 用于处理未接来电的 PhoneGap 插件

javascript - Android上运行的Chrome App如何接收UDP广播包

android - 任务 ':app:checkDebugDuplicateClasses' 执行失败。 Ionic4 安卓

java - Android SQLite : Using onUpgrade to update data?

android - 在 Android 的 TarsosDSP 库中使用 FFT

android - 是否可以通过编程方式设置主屏幕?

java - 读取纯文本文件