Вопрос по android – Android Phonegap: $ .ajax не запускает обратный вызов для неавторизованных (401)

3

Я использую PhoneGap для создания приложения для Android. Используя jQuery или Zepto, я могу звонить в API веб-сайтов с помощью вызова $ .ajax. Однако, когда веб-сайт возвращает ответ 401 (неавторизованный), кажется, что нет никакого обратного вызова от вызова ajax - ни одного из «success», «error» или «complete» позвонить.

Обратите внимание, что тот же код работает нормально, когда ответ 200 или 500.

Я использую Zepto 1.0rc1 и / или jQuery 1.7.2 с PhoneGap 1.6.1.

<code>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;
});
</code>

Ваш Ответ

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"} назад.

-2

Понизить телефонный разрыв. Да. Вы правильно прочитали.

Я пробовал 1.4.1: не работает.

Я попробовал 1.3.0: работает.

Так что да, это так.

Похожие вопросы