web-dev-qa-db-fra.com

Les demandes Ajax échouent après la mise à niveau vers Cordova 5.0 + [email protected]

J'ai récemment effectué une mise à niveau vers Cordova 5.0 (et Cordova Android 4.0) et, depuis lors, mon application ne peut plus accéder à des ressources externes.

J'ai toujours <access Origin="*" /> dans config.xml (comme auparavant) et j'ai toujours <uses-permission Android:name="Android.permission.INTERNET" /> dans AndroidManifest.xml (comme avant), mais les appels ajax sont rejetés sans explication (le paramètre "textStatus" est "error", "errorThrown" param est null et xhr.state () renvoie "rejeté").

J'ai vérifié qu'aucune requête ne heurtait le serveur. Il semble donc que celui-ci est en train d'être arrêté par Android, mais le journal ne donne aucune explication quant à la raison pour laquelle ...

Je peux accéder à l'URL en question très bien depuis le navigateur Android, mais pas depuis l'application.

La demande ajax est faite via un appel à Backbone.sync () de Backbone.js , qui appelle finalement $ .ajax () de jquery. Je n'ai rien changé à la façon dont l'appel est passé ... Cordova améliorée.

Existe-t-il de nouvelles exigences/configuration pour les demandes réseau, dans Cordova 5.0, ou tout ce que je dois faire différemment des versions précédentes de Cordova?

Est-ce que quelqu'un sait comment je peux obtenir plus d'informations sur les raisons pour lesquelles Android et/ou Cordova rejettent la demande?

28
Troy

J'ai retracé le coupable sur la plateforme [email protected] Cordova. Il nécessite maintenant le nouveau cordova-plugin-whitelist plugin.

Il peut être installé avec 

cordova plugin add cordova-plugin-whitelist

ou en ajoutant

<plugin name="cordova-plugin-whitelist" spec="1" />

config.xml, puis il est configuré avec

<allow-navigation href="*" />

à la place de l’ancienne balise <access Origin="*" />.

C'est un peu gênant que le journal ne crache plus les messages d'erreur de "rejet de la liste blanche" lorsqu'un problème comme celui-ci se présente (cela m'aurait fait économiser beaucoup de temps), mais peut-être que cela viendra plus tard.

51
Troy

Dans Cordova 6.X, vous devez supprimer le plug-in intégré de la liste blanche et réinstaller la nouvelle version du plug-in.

cordova plugin remove cordova-plugin-whitelist

et réinstallez le plugin 

cordova plugin add cordova-plugin-whitelist

puis remplacez <allow-navigation href="*" /> par le fichier config.xml au lieu de <access Origin="*" />dans le cas où cela aurait fonctionné.

3
Ali Abassi

si vous utilisez cordova 6.x.x, vous devez désinstaller le programme intégré cordova-plugin-whitelist à l’aide de 

plugin cordova supprimer la liste blanche cordova-plugin

et réinstallez-le en utilisant 

cordova plugin ajoute cordova-plugin-whitelist

même si le problème persiste, relancez la commande Invite et essayez-la.

1
shashanka s

Deux choses 

  1. Assurez-vous que l'URL ajax que vous utilisez autorise les demandes d'origine croisées
  2. Passez-vous des en-têtes pertinents lors des requêtes d'origine croisées? 

Lire 

http://enable-cors.org/

Comment activer CORS dans AngularJs

http://backbonetutorials.com/cross-domain-sessions/