Подтвердить что ты не робот

XMLHttpRequest не может загружаться не допускается Access-Control-Allow-Origin

Я пытаюсь получить доступ к данным API. Тем не менее, я все время получаю сообщение об ошибке:

XMLHttpRequest не может загрузить http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&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);
    });
});

Может кто-нибудь мне помочь?

4b9b3361

Ответ 1

Сообщение о Cross Domain AJAX выдается заново:

ПРОСМОТР ЗАПРОСА CROSS DOMAIN AJAX С ОТВЕТОМ JSON ДЛЯ IE, FIREFOX, CHROME, SAFARI - JQUERY

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

Access-Control-Allow-Origin: *

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

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

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

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

Ответ 2

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

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

Ответ 3

В 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;
  }

Ответ 4

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

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'

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