我必須使用以下版本構建的移動web應用程序: -jQuery Mobile的+的PhoneGap:Ajax調用不是Android模擬器的工作
- jQuery Mobile的:阿爾法4 v1.0a4.1
- JQuery的:V1 .6.1
- 的PhoneGap:v0.9.5
使用PhoneGap的,這個應用程序內置到原生Android應用和部署。
在我的應用程序中,我使用$ .ajax對外部網站進行各種AJAX調用。 爲此,我使用dataType:'jsonp'來完成跨域調用。
當我在Chrome v12.0.742.100中測試我的應用程序時,一切正常,我從外部網站檢索數據時沒有問題。但是,只要我將它打包成.apk文件並嘗試在模擬器中運行,我發現沒有任何ajax調用正在工作。
我已經在ajax調用之前和之後發出了警報,並驗證了兩個警報都被調用,但ajax調用與忽略一樣好。我已經登錄成功回調和錯誤回調,都沒有達到。我也通過在外部服務器網站上放置了一個斷點來驗證(對於我的測試,我只是在本地機器上有一個單獨的網站),並且服務器頁面絕對不會被調用。
在logcat中,我可以看到的錯誤是這樣的: d/SntpClient(59):請求時間失敗:java.net.SocketException異常:地址家族不受協議
支持我非常新到phonegap以及JQuery的手機,但據我瞭解,我的phonegap應用程序文件被引用file:/// protocol,而我的AJAX URL是http://127.0.0.1:someport/someapp/somepage和錯誤似乎表明這兩個不混合!如果確實如此,我該如何解決從phonegap部署的應用程序發出ajax調用?
請隨時指出其他可能有用的東西!在這一點上,我非常難過。
編輯:我已經檢查了AndroidManifest.xml文件,並且根據這個phonegap wiki link的所有權限都設置在這個文件中。
編輯2:添加在我的客戶端代碼intitiates Ajax調用
var serverUrl = "http://localhost:2424/MyServer/RetrieveMasterData.aspx";
$.ajax({
url: serverUrl,
type: 'POST',
dataType: 'jsonp',
data: { MasterDataID: 1 },
success: function(response) {
...... business logic here
},
error: function(xhr, ajaxOptions, thrownError) {
...... error handling something here
}
});
嗨,你是否添加了連接到互聯網的權限? – Francisc
我不知道它爲什麼在你的chrome上工作,但不是在android上。但是我確切知道的一點是,相同的原始策略不適用於file:///協議。 – root
你能發表一個顯示問題的代碼片段嗎? –