2013-08-15 15 views
22

Ho lavorato a questo negli ultimi due giorni e ho esaminato molti altri suggerimenti. Sì, posso ottenere questa semplice richiesta ajax di lavorare da un'applicazione di PhoneGap, sia sull'emulatore Android che su un vero telefono Android.Richiesta AJAX da PhoneGap Android non riesce

La mia versione è PhoneGap (usando PhoneGap -v) 3.0.0-0.14.3

Il codice che sto utilizzando è:

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

Il risultato mi sto nel registro è just:

errore | al file: ///android_asset/www/js/index.js: 62

ho aggiunto le impostazioni al 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" /> 

e ho il seguente in Config.xml

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

Quando controllo navigator.connection.type Ottengo 3G sull'emulatore e wifi sul telefono fisico.

Qualche idea su cos'altro potrebbe andare storto?

UPDATE: Se entro il JSON nel primo parametro della funzione in mancanza ottengo:

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

risposta

45

Si dovrebbe whitelist il dominio in modo che il vostro AJAX chiama a lavorare.

Aggiungi questa riga al file di configurazione -:

<access origin="*" /> 

blocchi dei dati di default di PhoneGap tutti l'accesso alla rete se non diversamente specificato. La riga precedente disabiliterà questa restrizione di sicurezza. Si può anche essere più specifico nel permettere solo alcuni domini di ignorare questa funzione di sicurezza, includendo il nome del dominio nel file di configurazione in questo modo

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

Così felice di vederlo alle 4 di mattina. –

15

in aggiunta al whitelist, assicurarsi che i cors flag è vero per abilitare origine croce condivisione di risorse.

$.support.cors=true; 

si prega di trovare il riferimento here

+2

akiva ti amo. buon lavoro. la whitelist da sola non funzionava. dovevo impostare questo a true sul caricamento della pagina! – dewd

0

ho avuto un URL localhost come stavo usando Visual Studio. Ho risolto il problema modificando il file Applicationhost.config dei progetti VS e facendo una versione del protocollo di binding in modo che sia : port: not *: port: localhost, quindi accedendo tramite indirizzo IP. Assicurarsi di ottenere tutti i riferimenti alla porta.

Problemi correlati