2013-10-12 163 views
1

我一直在努力爭取整天的這個問題,並在各地搜索。這可能是因爲我無法找到的解決方案是一個網頁...但我已經看了,如問題和解決方案:PhoneGap不發佈AJAX(jsonp)請求

Ajax call on phonegap not sending request

JQuery mobile + Phonegap : Ajax calls not working on Android Emulator

既不存在的解決方案似乎解決了我的問題。

我想要做的就是向我的遠程服務器發出一個AJAX調用,上傳幾個參數並下載一些內容。該腳本在瀏覽器中完美工作,但根據Phonegap中文件的輕微更改,可能會拋出「超時」錯誤,或者只是簡單地說「錯誤」。代碼如下(AJAX的端點是一個開發終點,我會離開它,所以你可以嘗試打它):

<html> 
<head> 
<script type="text/javascript" charset="utf-8" src="jquery-1.10.2.min.js"></script> 
</head> 

<body> 
<ul> 
<div id="app-status-ul"> 
<li>Loaded</li> 
</div> 
</ul> 
</body> 
<script> 
var serverRegHit = function(data, httpStat){ 
    $("#app-status-ul").append('<li>Server Reg OK, HTTP status: '+httpStat+'</li>'); 
    $("#app-status-ul").append('<li>Data Status: '+JSON.stringify(data)+'</li>'); 
}; 
var serverRegFail = function(data, httpStat){ 
    $("#app-status-ul").append('<li>Server Reg FAIL, HTTP status: '+httpStat+'</li>'); 
    $("#app-status-ul").append('<li>Data Status: '+JSON.stringify(data)+'</li>'); 
}; 
     $.ajax({url:"http://keb.bz/gcm/?deviceid=12345", 
       jsonp: 'callback', 
       dataType: 'jsonp', 
       timeout: 25000, 
       success: serverRegHit, 
       error: serverRegFail}); 

</script> 
</html> 

我一直在使用科爾多瓦2.9審判,降級到2.5,但這似乎也沒有幫助。

我的config.xml已經列入白名單。*和keb.bz域,權限允許應用程序訪問清單中的互聯網 - 我假設這是可行的,因爲它能夠成功檢索GCM設備ID。

我已經嘗試過使用JSON,JSONp,TEXT和各種數據類型的AJAX,但這些都沒有任何區別。

Cordova/PhoneGap中是否存在另一個我缺少的配置點?

任何幫助在這裏將不勝感激。

+0

在logcat的控制檯任何異常/錯誤?你確定jQuery庫加載成功嗎?首先,你應該確保純JavaScript工作,然後嘗試測試jQuery是否正常。 – xiaowl

+0

JQuery加載正常,因爲它成功地將錯誤輸出到DOM,並且無法注意到log cat中的任何異常。 – Kaiesh

+0

確保您的應用具有「網絡訪問」權限。 – xiaowl

回答

3

感謝@xioawl讓我再次檢查我的manifest.xml。原來我沒有正確配置權限。

最後,我捲起使用科爾多瓦2.5,jQuery的1.10,(未使用jQuery移動),設定我的RES/config.xml中具有以下的訪問路徑:

<access origin="http://127.0.0.1*" /> 
<access origin="http://keb.bz" subdomains="true" /> 
<access origin=".*" /> <!-- only during development --> 

配售這個片段後包括所有的JavaScript庫:

<script> 
$(document).bind("mobileinit", function(){ 
    $.mobile.allowCrossDomainPages = true; 
}); 
</script> 

,並使用以下的manifest.xml權限:

<uses-permission android:name="android.permissions.INTERNET" /> 
<uses-permission android:name="android.permissions.NETWORK_ACCESS" /> 
<uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" /> 

我的JSONp查詢繼續看如下:

$.ajax({url:"http://keb.bz/gcm/?deviceid=12345", 
     jsonp: 'callback', 
     dataType: 'jsonp', 
     timeout: 25000, 
     success: serverRegHit, 
     error: serverRegFail}); 

希望這對某人有用!

1

我今天也有類似的錯誤,當我更新使用在線的PhoneGap編譯我的應用程序...

我過去遵循的程序在2015年四月然後 做了幾tweeks今天,沒什麼大事,遵守它,我所有的ajax請求都已經過時了。我做了並警告錯誤字符串,並說「超時」。

然後我指定phonegap版本爲3.7.0,並重新編譯...所有我的阿賈克斯再次工作。 不確定CLI5.1和5.2發生了什麼變化,但它殺了我的應用程序。

短期的解決方案,儘快3.7可能不會支持了,然後我會卡住更改...很好的時間去本地我猜

+0

你有沒有在這方面取得進展?我通過使用人行橫道並將鉻降級到版本42x來「解決」它。我不覺得這個 – msander

+0

@msander好...不,不幸的是沒有。 – Shaakir