Erreur de requête GET angulaire, mais uniquement sur Safari iOS
Je suis en train de construire un site web en utilisant wordpress comme backend, et angularjs comme le frontend. Je suis en utilisant wordpress json API pour récupérer mes données pour le front-end.
https://wordpress.org/plugins/json-api/
Le problème
Je suis en utilisant angulaire de récupérer mes données à partir de la wordpres API json. J'ai créé le service suivant:
this.getPage = function ( slug ) {
return $http.get('wordpress/api/get_page/?slug=' + slug)
}
- Je utiliser ce service dans mon controller pour obtenir la page en cours
HTTPService.getPage('home')
.success(function ( data ) {
$scope.page = data.page;
console.log(arguments);
})
.error( function () {
console.log(arguments);
})
Si cela fonctionne bien dans tous les navigateurs, sauf pour safari iOS. Sur Safari iOS je reçois la réponse suivante si je journal de l'erreur arguments:
C'est le safari débogueur, j'ai connecté mon iphone à mon macbook. La réponse d'erreur que je reçois est un code d'erreur 0..
Ce que j'ai essayé jusqu'à présent
J'ai mis " Access-Control-Allow-Origin "*" dans le fichier htaccess, mais ca n'a pas l'air de fonctionner. La demande se fait sur le même domaine avec une URL relative, donc je ne pense même que c'est le problème.
Donc ne any1 savoir pourquoi cela ne fonctionne pas sur safari (iOS uniquement)?
Merci d'avance...
MODIFIER
Quelques informations supplémentaires sur demande:
source d'informationauteur koningdavid
Vous devez vous connecter pour publier un commentaire.
Je suis assez sûr que cela est dû au fait que Safari est le seul navigateur qui a la politique de blocage "3rd party cookies et autres données de site web" par défaut. En fait, cette question ne devrait pas être exclusive de Safari iOS, il faut également se produire avec Safari sur votre OSX. Je suis assez sûr que si ça ne se passe pas dans votre MacBook est parce qu'un jour vous avez modifié les paramètres par défaut de la "vie privée".
Vous pouvez essayer cela, ouvrez Safari, allez dans "préférences" et sous l'onglet "Pricacy" vérifiez si vous disposez de l'option "Bloquer les cookies et autres données de site web" set "De tierces parties et des annonceurs". C'est la première, et l'option par défaut dans les versions modernes de Safari.
Dans votre MacBook, il ressemblera à ceci:
Et iOS, il ressemblera à ceci:
Juste pour confirmer que c'est en fait ce qui est à l'origine de votre problème: le changement de ce paramètre à "Jamais", vider le cache et essayez de reproduire le problème à nouveau. Je suis tout à fait confiant que vous ne serez pas en mesure de le reproduire.
Maintenant, si vous retournez à "Bloquer les cookies et autres données de sites web: De tierces parties et des annonceurs" et de la première vider le cachevous aurez un problème nouveau (avec iOS ou OSX). Après que vous avez confirmé que c'est la cause de votre problème, définissez ce paramètre à "provenant De tierces parties et des annonceurs", de sorte que vous pouvez reproduire et de traiter le problème avec les paramètres par défaut.
Bare à l'esprit que chaque fois que vous souhaitez re-tester ce problème il sera préférable de vider le cache de Safary. Sinon, il pourrait arriver que Safari décide que le site servant de l'API peut être digne de confiance et vous ne serez pas en mesure de reproduire le problème. Donc, juste pour être sûr, vider le cache chaque fois que vous le vérifier.
Je crois que la racine de ce problème est que Safari veut s'assurer que l'utilisateur a eu une interaction directe avec la page qu'il est au service de la "3ème partie du contenu", avant que le chargement de la page que le contenu.
J'aurais besoin d'en savoir plus sur votre projet afin de proposer un "optimale" de la solution. Par exemple: l'appli finale et être intégrées dans le cadre du même domaine que l'API? Parce que si c'est le cas, vous ne devriez pas avoir ce problème quand vous allez à la production. Je veux dire, si l'application que vous êtes en développement sera hébergée dans:
http://whatever.yourDomain.org
et de l'API va être une partie de ce même domaine (yourDomain.org
), alors vous ne devriez pas avoir ce problème dans la production.D'autre part, si vous avez besoin d'avoir l'API hébergée dans un autre domaine, vous devrez trouver un moyen de "truc" de Safari. Jetez un oeil à ceci:
Et ce:
J'espère que cela aide.