我一直在嘗試製作一個可以進行AJAX調用的小測試應用程序。當我使用PhoneGap Desktop服務器和Android開發人員應用程序運行它時。一切正常。但是當我使用PhoneGap Build來編譯應用程序時,請在我的手機上安裝.apk。 AJAX呼叫失敗。PhoneGap Build:AJAX無法正常工作
我已閱讀全文,試圖找到解決我的問題。似乎有很多人也有這個問題,但到目前爲止,我還沒有能夠解決它。我看到有人說最常見的事情就是白名單問題。但我的config.xml文件中包含...
<plugin name="cordova-plugin-whitelist" source="npm" spec="~1.2.1"/>
以及...
<access origin="*"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
我的CSP看起來像這樣...
<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
它根據Cordova documentation應該允許AJAX。
我的應用程序非常簡單。它有一個按鈕,叫我的AJAX功能,並將其傳遞一些信息發送到服務器,以及一個回調函數...
<button onclick="serv('init',ajaxer)">BUTTON</button>
這裏是我的js文件:
function ajaxer(resp){
var e = document.getElementById("test");
e.innerHTML="responded...";
if(resp.go){
e.innerHTML="IT WORKED!";
}else{
e.innerHTML="foo";
}
}
function serv(request,returnFunc,parameters) { //SEND AND RECEIVE ALL SERVER INFO
document.getElementById("test").innerHTML="sending info...";
var query="";
var serverObject;
if(window.XMLHttpRequest){
serverObject = new XMLHttpRequest();
}else{
serverObject = new ActiveXObject("Microsoft.XMLHTTP");
}
serverObject.goto = returnFunc;
serverObject.onreadystatechange = function() {
if(serverObject.readyState==4&&serverObject.status==200){
var serverResponse = JSON.parse(serverObject.responseText);
serverObject.goto(serverResponse);
}
};
if(parameters){
query="&"+parameters;
}
serverObject.open("POST", "http://tylermackenzie.duckdns.org/phoneGap%20Test/server.php", true);
serverObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
serverObject.send('qType='+request+query);
}
當我按下該按鈕顯示文本「正在發送信息...」,但從未將其切換爲「已響應...」或「已處理!」或「富」。這意味着ajaxer()從未被調用過。
我不明白爲什麼它不起作用。就像我之前提到的。它使用phoneGap開發人員應用程序時效果很好。我在測試時關閉了手機的無線網絡。所以我知道手機與服務器位於不同的網絡上,因爲手機必須使用移動網絡。如果這只是一個白名單問題,當我用開發人員應用程序測試它時,它不應該有同樣的問題嗎?
另外,我知道這與我的服務器不存在問題,因爲它在我測試開發人員應用程序時以及在手動導航時響應良好。
希望有人能幫助我。
加成
它可能有一些做與我上傳到PhoneGap的建設我的文件結構?我剛剛使用了PhoneGap Desktop App創建的「hello world」基本應用程序。並編輯html和js來創建一個小測試應用程序。
這對我有點困惑,因爲在AppName/www以及AppName/platforms/browser和AppName/platforms/browser/www下有一個index.html爲什麼所有的文件都是三倍?我試圖讓所有三個副本是相同的東西。似乎沒有任何區別。
我在某處閱讀我只需要將AppName/www文件夾上傳到PhoneGap Build,它看起來和上傳其他文件一樣好。
@Homen白名單是1.2.2和Android 6.0 –
@Homen啊,對不起。它說「命令未找到」我假設,因爲我從來沒有安裝CLI的權利?我真的不需要它,如果我使用PhoneGap Build我嗎? –
我們最近有類似的問題。 如果我們「簽名」APK,它將不再獲得網絡訪問權限。 如果我們不簽名APK,並且其他所有內容都相同,則應用程序可以正常工作。 相同的應用程序也可以在IOS上運行(網絡連接)簽名和未簽名。 嘗試在phonegap構建上構建您的應用程序,而不用簽署它來克服此障礙。 我仍在試圖找出根本原因。 – DaShaun