web-dev-qa-db-fra.com

Obtenir une erreur [CORS] lors de l'utilisation de .getJSON pour obtenir les détails de l'application Play Store

En gros, j’utilisais donc l’API du marché de l’application 42matters.com pour obtenir les détails de l’application ou des informations sur le Google Play Store. Tout fonctionnait bien et j’obtenais la réponse JSON. Une erreur étrange s'est produite et rien n'a été renvoyé.

J'ai utilisé la fonction $ .getJSON comme:

var packageID = 'com.whatsapp';
   $.getJSON('https://42matters.com/api/1/apps/lookup.json?p='+packageID+'&access_token=accesstoken1234')
.done(function(appDetails) {
            $('#logo').html(JSON.stringify(appDetails));
        });

Comme mentionné, cela renvoyait les données et j'ai pu tout changer en conséquence, mais maintenant, cela me donne cette erreur sans aucune raison.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://42matters.com/api/1/apps/lookup.json?p=com.whatsapp&access_token=accesstoken1234. This can be fixed by moving the resource to the same domain or enabling CORS

j'ai activé le CORS en utilisant PHP, et rien ne s'est passé, j'ai essayé de changer le fichier de configuration d'Apache pour permettre à CORS de fonctionner, mais le service ne redémarre pas avec cela, je suis donc coincé.

Une dernière chose, lorsque je saisis manuellement le lien ci-dessus dans le navigateur, cela donne le résultat souhaité. S'il vous plaît aidez-moi à le résoudre

7
Hunain Usman

CORS est bloqué du côté du navigateur et ne permet pas à AJAX de demander des données à un autre domaine. Vous devez contacter l'équipe de 42matters.com pour ouvrir le fichier crossdomain.xml ainsi: Demande CORS jQuery AJAX ou Quelqu'un peut-il envoyer un exemple bien formé de crossdomain.xml?

Ou la solution de contournement pour AJAX Cross-Domain est JSONP: jQuery AJAX cross domain mais l'API doit prendre en charge ce type de requête.

La dernière chose à faire est de ne pas utiliser AJAX pour collecter des données à partir d'autres sources. Si c'est une plateforme mobile, il devrait avoir un objet HTTP Request natif pour le faire.

8
imkrisna

Je sais que c'est une vieille technologie, mais certains d'entre nous doivent encore faire face à cela.

Si vous utilisez un serveur Web IIS6:

  • Ouvrez le service IIS (Internet Information Service)
  • Cliquez avec le bouton droit sur le site pour lequel vous souhaitez activer CORS et accédez à Propriétés.
  • Passer à l'onglet En-têtes HTTP
  • Dans la section En-têtes HTTP personnalisés, cliquez sur Ajouter.
  • Entrez Access-Control-Allow-Origin comme nom d'en-tête.
  • Entrez * comme valeur d'en-tête
  • Cliquez deux fois sur Ok

IIS7 - Ajoutez ceci à votre web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Origin" value="*" />
     </customHeaders>
   </httpProtocol>
 </system.webServer>
</configuration>
5
Diego Sagrera

Nous pouvons résoudre le problème en plaçant une balise de base sur notre fichier html.

<head>
<base href="http://www.otherdomain.com/xyz/">
</head>
0
Devendra Patel