2013-06-18 7 views
21

Sto tentando di accedere ai dati API di education.com. Tuttavia, continuo a ricevere un errore gli stati di errore:Impossibile caricare XMLHttpRequest non consentito da Access-Control-Allow-Origin

XMLHttpRequest non può caricare http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json. L'origine non è consentita da Access-Control-Allow-Origin.

Il mio codice è il seguente:

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

Qualcuno mi può aiutare per favore?

+1

Questo API accetta un parametro callback jsonp? non sembra al momento. In caso contrario, non è possibile richiederlo utilizzando solo il browser. –

+0

questo è molto completo [3 semplici soluzioni] (http://stackoverflow.com/a/15747224/1140227) – George

+0

Prova cross-domain ... controlla http://www.pureexample.com/jquery/cross-domain- ajax.html – KingRider

risposta

2

Non è possibile eseguire questa operazione con un browser a meno che il server education.com non sia configurato per consentire le richieste CORS (Cross-Origin Resource Sharing) (Questo è il bit Access-Control-Allow-Origin).

Il server è in grado di inoltrare la richiesta per proprio conto, quindi è possibile recuperare i dati da lì.

14

Un articolo su tra domini AJAX problema un po 'indietro qui:

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

Il modo più semplice per gestire questo se si ha il controllo del server rispondere è quello di aggiungere un'intestazione di risposta per:

Access-Control-Allow-Origin: * 

Ciò consentirà il dominio incrociato AJAX. In PHP si vorrà modificare la risposta in questo modo:

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

si può semplicemente mettere intestazione Set Access-Control-Allow-Origin * impostazione conf apache o un file .htaccess è solo di lavoro come un fascino

Nota importante:
Il jolly consente a qualsiasi dominio di inviare richieste al proprio host. Raccomando di sostituire l'asterisco con un dominio specifico su cui verranno eseguiti gli script.

+18

Sfortunatamente, non ho il controllo del server di risposta. :/ – user2495586

1

In ZF1 può essere fatto, come di seguito:

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

Non tanto una soluzione al problema, ma un trucco per evitare il problema - avviare il browser web senza protezione:

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' 

Nota: non utilizzare mai il browser per la normale navigazione, questo è solo per farti andare in caso di emergenza! Cheers

+0

L'esecuzione di 'google-chrome --disable-web-security' non risolve questo problema in Linux. Sarei sorpreso se questo funziona davvero su Mac ... – weberc2