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?
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.
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.
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;
}
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!