web-dev-qa-db-fra.com

Impossible de charger XMLHttpRequest n'est pas autorisé par Access-Control-Allow-Origin

J'essaie d'avoir accès aux données de l'API education.com. Cependant, je continue à recevoir une erreur qui dit: 

XMLHttpRequest ne peut pas charger http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json …. Origin n'est pas autorisé par Access-Control-Allow-Origin.

Mon code est le suivant: 

$(function(){
    $.getJSON('http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json', 
    function(data) {
        console.log(data);
    });
});

Quelqu'un peut m'aider s'il vous plaît? 

21
user2495586

Un article sur Cross Domain AJAX a été publié il y a quelque temps: 

DEMANDE DE DOMAINE CROSS AJAX AVEC RÉPONSE JSON POUR IE, FIREFOX, CHROME, SAFARI - JQUERY

Le moyen le plus simple de gérer cela si vous avez le contrôle du serveur répondeur consiste à ajouter un en-tête de réponse pour:

Access-Control-Allow-Origin: *

Cela permettra AJAX inter-domaine. Dans PHP, vous voudrez modifier la réponse comme suit:

<?php header('Access-Control-Allow-Origin: *'); ?>

vous pouvez simplement mettre le paramètre Header set Access-Control-Allow-Origin * sur Apache conf ou htaccess, il fonctionne comme un charme

Note importante:
Le caractère générique permettra à n'importe quel domaine d'envoyer des demandes à votre hôte. Je recommande de remplacer l'astérisque par un domaine spécifique sur lequel vous exécuterez des scripts.

15
SALMAN

Vous ne pouvez le faire avec un navigateur que si le serveur education.com est configuré pour autoriser les demandes CORS (Cross-Origin Resource Sharing) (c'est le bit Access-Control-Allow-Origin). 

Votre serveur peut toutefois faire la demande en votre nom et vous pouvez ensuite récupérer les données à partir de là.

2
user1864610

Dans ZF1 peut être fait comme ci-dessous:

  public function indexAction() {
    $turnkey = array(
        "uris" => array("176.x.x:3478", "3478"),
        "username" => "my_username",
        "password" => "my_password"
    );

    $content = Zend_Json::encode($turnkey);
    $this->getResponse()
            ->setHeader('Access-Control-Allow-Origin', "*")
            ->setHeader('Content-Type', 'application/json')
            ->setBody($content)
            ->sendResponse();
    exit;
  }
1
YumYumYum

Pas tellement une solution au problème, mais un hack pour éviter le problème - démarrez votre navigateur sans sécurité Web:

in MacOS this would work as follows: cd to ../../Applications/Google\ Chrome.app/Contents/MacOS
then start the brwoser with the appropiate flag: Google\ Chrome --disable-web-security'

Remarque: n'utilisez jamais le navigateur pour surfer normalement, c'est simplement pour vous aider à prendre les devants en cas d'urgence!

0
Lukas N.P. Egger