3

PhoneGap を使用して Android アプリを作成しています。jQuery または Zepto を使用して、$.ajax 呼び出しを使用して Web サイト API を呼び出すことができます。ただし、Web サイトが 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

フォンギャップをダウングレードします。はい。あなたはその権利を読みます。

1.4.1 を試しました: 動作しませんでした。

1.3.0 を試しました: 動作します。

ええ、それはそれです。

于 2012-05-08T18:37:33.407 に答える