javascript — XMLHttpRequest не может загрузить не разрешен Access-Control-Allow-Origin

Я пытаюсь получить доступ к данным API Education.com. Однако я продолжаю получать сообщение об ошибке:

XMLHttpRequest не может загрузить
http://api.education.com/service/service.php?f=schoolSearch&ключ = MyKey&Sn = SF&v = 4&город = Атлант&состояние = га&RESF = JSON.
Происхождение не разрешено Access-Control-Allow-Origin.

Мой код следующий:

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

Может кто-то помочь мне, пожалуйста?

21

Решение

Статья о Кросс-домен AJAX выпустить некоторое время назад здесь:

CROSS DOMAIN AJAX REQUEST с JSON-ответом для IE, FIREFOX, CHROME, SAFARI — JQUERY

Самый простой способ справиться с этим, если у вас есть контроль над отвечающим сервером, это добавить заголовок ответа для:

Access-Control-Allow-Origin: *

Это позволит кросс-домен AJAX. В PHP вы захотите изменить ответ следующим образом:

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

Вы можете просто установить заголовок set Access-Control-Allow-Origin * на apache conf или htaccess, он просто работает как шарм

Важная заметка:
Подстановочный знак позволяет любому домену отправлять запросы на ваш хост. Я рекомендую заменить звездочку конкретным доменом, на котором вы будете запускать скрипты.

15

Другие решения

Вы не можете сделать это с браузером, если сервер образования.com не настроен для поддержки CORS (Cross-Origin Resource Sharing) запросы (это Access-Control-Allow-Origin немного).

Однако ваш сервер может сделать запрос от вашего имени, и вы сможете получить данные оттуда.

2

В ZF1 это можно сделать так:

  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

Не столько решение проблемы, сколько взлом, чтобы избежать проблемы — запустите браузер без веб-безопасности:

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'

Примечание: Никогда не используйте браузер для обычного серфинга, это просто для того, чтобы вы работали в чрезвычайных ситуациях!
ура

0
По вопросам рекламы [email protected]