2012-04-24 34 views
3

我正在使用PhoneGap構建Android應用程序。使用jQuery或Zepto,我可以使用$ .ajax調用來調用網站API。但是,當網站返回401(未授權)響應時,似乎沒有來自ajax調用的回調 - 沒有任何「成功」,「錯誤」或「完成」被調用。

需要注意的是相同的代碼工作正常時,迴應是200或500。

我使用的Zepto 1.0rc1和/或jQuery的1.7.2與1.6.1的PhoneGap。

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

回答

-2

降級phonegap。是。你讀得對。

我試過1.4.1:沒有工作。

我試過1.3.0:作品。

所以是的,就是這樣。

0

我剛剛有同樣的問題。當我得到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"}回來。