2016-07-07 23 views
2

Ich habe versucht, eine kleine Test-App, die einen AJAX-Anruf macht. Wenn ich es mit dem PhoneGap Desktop Server und der Android Developer App starte. Alles funktioniert gut. Aber wenn ich PhoneGap Build verwende, um die App zu kompilieren, installiere die .apk auf meinem Handy. Der AJAX-Aufruf schlägt fehl.PhoneGap Build: AJAX funktioniert nicht

Ich habe alles gelesen, um eine Lösung für mein Problem zu finden. Es scheint, dass es auch viele Leute gibt, die dieses Problem haben, aber bisher konnte ich es nicht beheben. Die häufigste Sache, die ich sehe, ist, dass es sich um eine Whitelist handelt. Aber meine config.xml-Datei enthält ...

<plugin name="cordova-plugin-whitelist" source="npm" spec="~1.2.1"/> 

sowie ...

<access origin="*"/> 
<allow-intent href="http://*/*"/> 
<allow-intent href="https://*/*"/> 

Und mein CSP sieht wie folgt aus ...

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> 

die nach Cordova documentation sollte AJAX erlauben.

Meine App ist sehr einfach. Es verfügt über eine Schaltfläche, die meine AJAX-Funktion aufruft und übergibt es einige Informationen an den Server, und eine Rückruffunktion ...

<button onclick="serv('init',ajaxer)">BUTTON</button> 

Hier ist meine js Datei zu senden:

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

Wenn ich drücken Die Schaltfläche zeigt den Text "sending info ..." an, schaltet aber niemals auf "requested ..." oder "IT WORKED!" um. oder "foo". was bedeutet, dass ajaxer() nie aufgerufen wurde.

Ich kann nicht verstehen, warum es nicht funktioniert. Wie ich bereits erwähnt habe. Es funktioniert gut, wenn ich die phoneGap Entwickler-App verwende. Und ich habe mein Handy wifi ausgeschaltet, während ich es teste. Ich weiß also, dass sich das Telefon in einem anderen Netzwerk befindet als der Server, weil das Telefon das Mobilfunknetz benutzen muss. Wenn das nur eine Whitelist ist, sollte es nicht dasselbe Problem haben, wenn ich es mit der Entwickler-App teste?

Außerdem weiß ich, dass es kein Problem mit meinem Server ist, weil es gut reagiert, wenn ich in der Entwickler-App teste, und wenn ich manuell dorthin navigiere.

Ich hoffe, jemand kann mir helfen.

ADDITION

es etwas haben könnte mit meiner Dateistruktur zu tun, die ich PhoneGap sind Hochladen zu bauen? Ich habe gerade die "Hallo Welt" Basis-App verwendet, die die PhoneGap Desktop App erstellt. Und editiert die html und js um eine kleine Test App zu erstellen.

Es ist ein wenig verwirrend für mich, denn es gibt eine index.html unter AppName/www sowie AppName/platforms/browser und unter AppName/platforms/browser/www Warum werden alle Dateien verdreifacht? Ich habe versucht, alle drei Kopien zu machen. scheint keinen Unterschied zu machen.

Ich habe irgendwo gelesen, dass ich nur den AppName/www-Ordner zu PhoneGap Build hochladen muss, und es scheint genauso gut zu funktionieren, als alles andere hochzuladen.

+0

@Homen weiße Liste nützlich wäre, ist 1.2.2 und Android 6.0 –

+0

@Homen ah, sorry. Es heißt "Befehl nicht gefunden" Ich nehme an, weil ich das CLI nie richtig installiert habe? Ich brauche es nicht wirklich, wenn ich PhoneGap Build verwende, oder? –

+0

Wir haben kürzlich ein ähnliches Problem. Wenn wir die APK "signieren", erhalten sie keinen Netzwerkzugriff mehr. Wenn wir die APK nicht signieren und alles andere gleich ist, funktioniert die Anwendung. Die gleiche Anwendung funktioniert auch (Netzwerkkonnektivität) auf IOS signiert und unsigniert. Versuchen Sie, Ihre Anwendung auf Phonegap Build OHNE Unterzeichnung zu bauen, um über diese Hürde zu kommen. Ich versuche immer noch, die Ursache herauszufinden. – DaShaun

Antwort

1

Haben Sie versucht, einen Abschnitt "connect-src" zu Ihrer Inhaltssicherheitsrichtlinie hinzuzufügen?Zum Beispiel:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; connect-src *"> 

Regelt wo Ajax-Anfragen gemacht werden können, finden Sie Dokumentation bei content-security-policy.com

+0

Yup, hatte es vorher versucht, und gab es eine weitere Aufnahme Kopieren Sie Ihren Code. immer noch nichts. –

1

Ich empfehle Ihnen jQuery zu verwenden AJAX-Anforderungen ist es überschaubar und wartbar auch ist es leichter zu machen machen ajax-Request über jQuery

auch können Sie phonegap Anwendung debuggen und sehen, wie ajax-Request geht und zurück zum Server und vom Server mithilfe weinre Remote-Debugger Sie in der folgenden Anleitung dargestellten Schritte folgen t dieses machen Weinre Remote Debugging Tutorial

hoffe, dass ich meine Antwort

+0

Habe gerade versucht, die App auf jQuery umzustellen. Nochmal. der jQuery ajax call funktioniert hervorragend, wenn ich ihn mit der phonegap entwickler-app auf meinem system teste. Aber wenn ich Phonegap Build verwende. Die Ajax-Aufrufe meiner kompilierten App schlagen fehl. –

+0

Korrigieren Sie mich, wenn ich falsch liege, aber ist Weinre nicht zum Debuggen meiner Web-App, bevor es kompiliert wurde? während es noch in einem Browser entwickelt wird? und nicht als eine installierte APK-Datei. Wenn das stimmt, würde es mir nicht viel nützen, weil meine App gut vorkompiliert ist. Erst nachdem ich die APK-Datei installiert habe, funktioniert sie nicht mehr. –

+0

die phonegap app ist ein webview können sie immer noch debuggen sie mit weinre, weinre ist nur remote debugger können sie weinre script datei die referenz auf ihren pc in der anwendung und wenn app geöffnet weinre server zeigen gerät verbunden können sie dann inspizieren ajax antrag und html Wie bei Chrome, aber das Ziel ist Ihre Anwendung, ich habe es getestet und es funktioniert. –

Verwandte Themen