2013-08-15 16 views
22

Ich habe die letzten zwei Tage daran gearbeitet und viele andere Vorschläge angeschaut. Ja, ich kann diese einfache Ajax-Anfrage aus einer Phonegap-Anwendung bekommen, sowohl auf dem Android-Emulator als auch auf einem echten Android-Handy.AJAX-Anfrage von Phonegap Android schlägt fehl

ist meine phonegap Version (phonegap -v) 3.0.0-0.14.3

Der Code Ich verwende ist:

var url = 'http://www.thomas-bayer.com/sqlrest/CUSTOMER'; 
    return $.ajax({ 
     type: "GET", 
     url: url, 
     timeout: 60 * 1000 
    }).done(function (data) { 
     alert('hey'); 
    }).fail(function (a, b, c) { 
     console.log(b + '|' + c); 
    }); 

Das Ergebnis bin ich im Protokoll bekommen ist nur:

Fehler | bei Datei: ///android_asset/www/js/index.js: 62

Ich habe die Einstellungen auf die AndroidManifest.xml

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

und ich habe folgendes in Config.xml

<param name="android-package" value="org.apache.cordova.core.NetworkManager" /> 

Wenn ich navigator.connection.type überprüfe, bekomme ich 3G auf dem Emulator und wifi auf dem physischen Telefon.

Irgendeine Idee, was sonst könnte schiefgehen?

UPDATE: Wenn ich die JSON im ersten Parameter der fehlerhaften Funktion log ich:

{"readyState":4,"status":404,"statusText":"error"} 

Antwort

45

Sie sollten die Domain, um whitelist für Ihre AJAX arbeiten aufruft.

diese Zeile in config-Datei hinzufügen -:

<access origin="*" /> 

Phonegap der Standardrichtlinie blockiert alle Zugangsnetz, sofern nicht anders angegeben. Die obige Zeile deaktiviert diese Sicherheitsbeschränkung. Sie können auch in so dass nur bestimmte Domänen konkretisieren diese Sicherheitsfunktion zu umgehen, indem er den Domainnamen in der Konfigurationsdatei einschließlich wie so

<access origin="http://yourdomain" /> 
+12

Sooo froh, das um 4 Uhr morgens zu sehen. –

15

zusätzlich zu den weißen Listen, stellen Sie sicher, dass die cors Flag gilt Quer Herkunft zu ermöglichen, gemeinsame Nutzung von Ressourcen.

$.support.cors=true; 

finden Sie in Referenz here

+2

akiva Ich liebe dich. Gut gemacht. Whitelist allein hat nicht funktioniert. musste dies beim Laden der Seite auf True setzen! – dewd

0

ich localhost url hatte, wie ich Visual Studio wurde mit. Ich löste durch Bearbeitung der VS-Projekte Applicationhost.config-Datei und Erstellen einer Version des Bindungsprotokolls, so dass es ist: Port: nicht *: Port: localhost und dann Zugriff über IP-Adresse. Stellen Sie sicher, dass Sie alle Referenzen auf den Port erhalten.

Verwandte Themen