2013-06-18 6 views
21

Próbuję uzyskać dostęp do danych API education.com. Jednakże, wciąż otrzymuję błąd stany błędach:XMLHttpRequest nie można załadować jest niedozwolone przez Access-Control-Allow-Origin

XMLHttpRequest nie może załadować http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json. Pochodzenie jest niedozwolone przez Access-Control-Allow-Origin.

mojego kodu jest następujący:

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

Czy ktoś może mi pomóc proszę?

+1

Czy ten api akceptuje parametr zwrotny jsonp? obecnie nie wydaje się. Jeśli nie, nie możesz poprosić o to za pomocą samej przeglądarki. –

+0

to jest bardzo obszerne [3 proste rozwiązania] (http://stackoverflow.com/a/15747224/1140227) – George

+0

Spróbuj w wielu domenach ... sprawdź http://www.pureexample.com/jquery/cross-domain- ajax.html – KingRider

Odpowiedz

2

Nie można tego zrobić w przeglądarce, chyba że serwer education.com jest skonfigurowany tak, aby zezwalał na żądania CORS (Cross-Origin Resource Sharing) (to jest bit Access-Control-Allow-Origin).

Twój serwer może jednak wysyłać żądanie w Twoim imieniu, a następnie pobierać tam dane.

14

Artykuł o Krzyż Domain AJAX kwestii jakiś czas temu tutaj:

CROSS DOMAIN AJAX REQUEST WITH JSON RESPONSE FOR IE,FIREFOX,CHROME, SAFARI – JQUERY

Najprostszym sposobem radzenia sobie z tym, jeśli masz kontrolę serwera odpowiadającego jest dodanie nagłówka odpowiedzi dla:

Access-Control-Allow-Origin: * 

Umożliwi to AJAX między domenami. W PHP będziesz chciał modyfikować odpowiedź tak:

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

można po prostu umieścić ustawić nagłówek Access-Control-Allow-Origin * Ustawienie na apache conf lub pliku .htaccess po prostu działa jak czar

Ważna uwaga:
Symbol wieloznaczny zezwala każdej domenie na wysyłanie żądań do hosta. Zalecam zastąpienie gwiazdki konkretną domeną, na której będziesz uruchamiać skrypty.

+18

Niestety, nie mam kontroli nad odpowiadającym serwerem. :/ – user2495586

1

W ZF1 można zrobić jak poniżej:

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

nie tyle rozwiązanie problemu, ale hack do uniknięcia problemu - uruchom przeglądarkę internetową bez zabezpieczenia:

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' 

Uwaga: Nigdy nie używaj przeglądarki do normalnego surfowania, tylko po to, abyś mógł działać w nagłych wypadkach! Pozdrowienia

+0

Uruchomienie 'google-chrome - disable-web-security' nie rozwiązuje tego problemu w Linuksie. Byłbym zaskoczony, gdyby to działało na Macu ... – weberc2

Powiązane problemy