我正在將一個經過手動優化的Ajaxed網站移植到PhoneGap,但未能成功獲取POST到服務器。從我讀過的文章來看,xhreq POSTS應該可以在PhoneGap中使用。PhoneGap應用程序的XMLHttpRequest POST數據丟失
具體內容:我針對Android平臺,採用最新的Cordova 3.3.1-0.1.2,最新的Android SDK以及由Verizon更新至Android 4.3的Galaxy S3。連接是通過無線連接到我的本地服務器。在每一次嘗試中,POST都以GET的形式到達服務器,沒有發佈數據(使用tcpdump檢查數據包進行驗證)。移動設備優化的網站在同一部手機的瀏覽器上也可以正常工作,也可以通過WiFi訪問。
我已經通過創建一個全新的PhoneGap項目分離失敗的情況下,無非就是:
$ cordova create Hello
$ cd Hello
$ cordova platform add android
然後在index.js,在onDeviceReady處理程序結束,加入片斷我第一次測試在一個簡單的瀏覽器頁面(域這裏取代):
// TEST POST CAPABILITY
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState==4 && (req.status==200 || req.status==0)) {
console.log("POST Response: " + req.responseText);
}
};
var t = new Date().getTime(); // Just to foil any caching
req.open("POST", "http://mydomain.com/services/rpc?t=" + t, true); // async
req.setRequestHeader('Content-type','application/text; charset=utf-8');
var postContent = JSON.stringify({id:t, method:"misc.log", params:[{log:"POST Test"}]});
req.send(postContent);
然後在手機上運行帶有:
$ cordova run android
它像失敗的應用程序一樣失敗,以無GET數據的GET方式到達服務器。我覈實了幾個配置項的默認值,以確保他們的要求:
在config.xml中:
<access origin="*" />
在AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
任何想法,什麼可能出問題了,還是要看其他的東西?
謝謝。
我相信,由於客戶端和服務器不在同一個域中,因此存在CORS問題。它要求你使用jsonp,但jsonp只會允許GET請求。 – Tom
phonegap應用程序中的客戶端實際上是文件系統,因此服務器域自然會有所不同 - 從我在PhoneGap文檔和各種帖子中可以找到的信息,他們通過配置處理此問題,默認允許所有域(如上)。只是爲了踢踢我試圖(暫時)改變服務器端以允許任何事情,以及通過添加://只是測試,試圖讓PhoneGap RPC的工作... response.setHeader(「Access-Control-Allow-Origin」,「 *「); response.setHeader(「Access-Control-Allow-Methods」,「GET POST」); –
我剛剛注意到帖子#15260609,這不是PhoneGap特定的,但類似的「POST變成GET與下降的內容」方面 - 我嘗試瞭解決方案那裏(用斜線結束URL),但它沒有更正問題。但是,我想知道是否有其他原因可能導致類似的「重新嘗試GET」。 –