it-swarm.com.de

XMLHttpRequest kann von Access-Control-Allow-Origin nicht geladen werden

Ich versuche, auf die API-Daten von education.com zuzugreifen. Ich erhalte jedoch weiterhin eine Fehlermeldung, die besagt: 

XMLHttpRequest kann nicht geladen werden http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json . Origin ist für Access-Control-Allow-Origin nicht zulässig.

Mein Code lautet wie folgt: 

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

Kann mir bitte jemand weiterhelfen? 

21
user2495586

Ein Artikel über Cross Domain AJAX gibt hier eine Weile aus: 

CROSS DOMAIN AJAX ANFRAGE MIT JSON-ANTWORT FÜR IE, FIREFOX, CHROM, SAFARI - JQUERY

Der einfachste Weg, dies zu tun, wenn Sie die Kontrolle über den antwortenden Server haben, ist das Hinzufügen eines Antwortheaders für:

Access-Control-Allow-Origin: *

Dies ermöglicht AJAX-Domäne. In PHP sollten Sie die Antwort wie folgt ändern:

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

sie können einfach die Einstellung für die Kopfzeilen-Zugriffssteuerungs-Zulassungsursprung * in die Apache-Datei conf oder htaccess setzen, die nur wie ein Zauber wirkt

Wichtige Notiz:
Mit dem Platzhalter kann jede Domain Anfragen an Ihren Host senden. Ich empfehle, das Sternchen durch eine bestimmte Domäne zu ersetzen, auf der Sie Skripts ausführen.

15
SALMAN

Mit einem Browser ist dies nicht möglich, es sei denn, der education.com-Server ist so konfiguriert, dass er CORS-Anforderungen (Cross-Origin Resource Sharing) zulässt (das ist das Access-Control-Allow-Origin-Bit). 

Ihr Server könnte jedoch die Anfrage für Sie stellen, und Sie können die Daten von dort abrufen.

2
user1864610

In ZF1 können Sie wie folgt vorgehen:

  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

Nicht so sehr eine Lösung für das Problem, aber ein Hack, um das Problem zu vermeiden - Starten Sie Ihren Browser ohne Internetsicherheit:

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'

Hinweis: Verwenden Sie den Browser niemals für normales Surfen. Dies dient nur dazu, Sie in Notfällen voranzubringen!

0