web-dev-qa-db-fra.com

AJAX La demande de Phonegap Android échoue

J'y travaille depuis deux jours et j'ai examiné beaucoup d'autres suggestions. Oui, je peux obtenir cette simple requête ajax pour travailler à partir d'une application phonegap, à la fois sur l'émulateur Android et sur un téléphone Android réel.

Ma version de Phonegap est (en utilisant phonegap -v) 3.0.0-0.14.3 

Le code que j'utilise est:

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

Le résultat que je reçois dans le journal est juste:

erreur | au fichier: ///Android_asset/www/js/index.js: 62

J'ai ajouté les paramètres au fichier 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" />

et j'ai les éléments suivants dans Config.xml

<param name="Android-package" value="org.Apache.cordova.core.NetworkManager" />

Lorsque je vérifie navigator.connection.type, je reçois 3G sur l'émulateur et wifi sur le téléphone physique.

Une idée de quoi d'autre pourrait aller mal?

UPDATE: Si je consigne le JSON dans le premier paramètre de la fonction défaillante, je reçois:

{"readyState":4,"status":404,"statusText":"error"}
23
Ron Harlev

Vous devriez liste blanche le domaine pour que vos appels AJAX fonctionnent.

Ajouter cette ligne au fichier de configuration -:

<access Origin="*" />

La politique par défaut de Phonegap bloque tout accès au réseau, sauf indication contraire. La ligne ci-dessus désactivera cette restriction de sécurité. Vous pouvez également être plus précis en n'autorisant que certains domaines à contourner cette fonctionnalité de sécurité en incluant le nom de domaine dans le fichier de configuration, comme

<access Origin="http://yourdomain" />
47
Raoul George

en plus de la liste blanche, assurez-vous que l'indicateur cors est vrai pour permettre le partage de ressources croisé d'origine.

$.support.cors=true;

veuillez trouver la référence ici

15
akiva

J'avais une URL d'hôte local lorsque j'utilisais Visual Studio . J'ai résolu le problème en modifiant le fichier Applicationhost.config des projets VS et en créant une version du protocole de liaison de sorte que ce soit lui: port: pas *: port: localhost, puis en accédant via l'adresse IP. Assurez-vous d’obtenir toutes les références au port.

0
Sabel