2012-05-30 28 views
6

Sto tentando di recuperare una risposta XML utilizzando chiamate ajax a l'API eXist DB REST (1).XMLHttpRequest non può caricare http: // localhost: 8080/exist/rest/db/.... Origine null non consentita da Access-Control-Allow-Origin

Google Chrome mi fornisce il seguente errore console:

XMLHttpRequest cannot load XMLHttpRequest cannot load http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies. Origin null is not allowed by Access-Control-Allow-Origin Origin null is not allowed by Access-Control-Allow-Origin 

Mentre Firebug in Firefox fornisce il seguente errore di console:

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies 200 OK X 35ms jquery.min.js(line 18) 

Ecco la parte ajax del codice:

$.ajax({ 
        type: 'GET', 
        dataType: 'xml', 
        url: 'http://localhost:8080/exist/rest/db/movies', 
        data: { 
         _query: _query_value, 
         _key: _key_value, 
         _indent: _indent_value, 
         _encoding: _encoding_value, 
         _howmany: _howmany_value, 
         _start: _start_value, 
         _wrap: _wrap_value, 
         _source: _source_value, 
         _cache: _cache_value 
        }, 
        success: function(resp){ 
         alert("Resp OK!"); 
         console.log(resp); 
        }, 
        error: function(hqXHR, textStatus, errorThrown){ 
         var x=0; 
         alert("fail0 " + hqXHR + " " + textStatus + " " + errorThrown); 
        } 
       }); 

Ho letto alcuni problemi correlati su questo stesso problema, ma non ho trovato nessuna fortuna con nessuna delle soluzioni che ho provato.

L'index.html che contiene il segmento di codice Ajax sopra si accede dalla mia macchina locale come segue:

file:///.../index.html 

ho cercato di eseguire Chrome come segue:

chrome.exe --allow-file-access-from-files 

Inoltre, ho provato per distribuire il file a un host online in modo che si trovi a

http://www.<somedomain>.com/index.html 

Il più vicino la soluzione che avevo era di cambiare il dataType del da xml a jsonp. La reponse è stata ricevuta, ma dal momento che è prevista per xml, l'errore divenne legata alla analisi, credo che, con la seguente affermazione restituito dalla console di Google Chrome:

Uncaught SyntaxError: Unexpected token < 

e console Firebug:

XML can't be the whole program 
[Break On This Error] 
</exist:result> 
movies...3302057 (line 528, col 15) 

Tornando alla mia domanda, come posso recuperare correttamente il documento xml tramite DB eXist? Che cosa sto facendo di sbagliato?

In attesa di vostro aiuto. Sono abbastanza nuovo allo sviluppo del web e sto esaurendo le idee.

Grazie in anticipo!

Altre note:

Le jquery.min.js che sto usando si trova a http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js

l'URI http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies opere quando digitato direttamente in qualsiasi browser.

Riferimento:

(1) - http://www.exist-db.org/exist/devguide_rest.xml;jsessionid=e7096vtg4l7gmocouhe6zhle 

Aggiornamenti (1) Sembra che ero in grado di sbarazzarsi del problema CORS da corsa esistono DB come server come segue: bin/server.sh (in UNIX) o bin \ server.bat (in Windows).

Ora, sto incontrando un altro tipo di problema, però. Ottengo il seguente errore nella console di Google Chrome utilizzando jquery.js:

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies jquery.js:8240 
jQuery.ajaxTransport.send jquery.js:8240 
jQuery.extend.ajax jquery.js:7719 
(anonymous function) index.html:43 
jQuery.event.dispatch jquery.js:3332 
jQuery.event.add.elemData.handle.eventHandle jquery.js:2941 

e utilizzando jquery.min.js:

GET http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies jquery.min.js:18 
f.support.ajax.f.ajaxTransport.send jquery.min.js:18 
f.extend.ajax jquery.min.js:18 
(anonymous function) index.html:43 
f.event.handle jquery.min.js:17 
f.event.add.i.handle.k jquery.min.js:16 

Che cosa significa l'errore? Quale parte del mio codice sto facendo erroneamente?

(2) L'aggiornamento 1, a quanto pare, è un problema non necessario che ho dovuto affrontare. La modalità server non funzionava con la mia macchina e questo è il motivo per cui si sono presentati gli errori sopra riportati.

+0

possibile duplicato di [XmlHttpRequest errore: Origine null non consentito da Access-Control-Allow-Origin] (http://stackoverflow.com/questions/3595515/xmlhttprequest-error-origin-null-is-not-allowed -by-access-control-allow-origin) – jrummell

risposta

4

Questa è una richiesta interdominio e non è consentita. Test da localhost anziché da file: //. Inoltre, il server remoto deve restituire le intestazioni corrette CORS se è previsto che funzionino in più domini con qualsiasi dataType diverso da JSONP. Il tipo di dati JSONP non è pensato per restituire XML.

+0

Grazie. Sono stato in grado di leggere su CORS. Poi ho provato a eseguire eXist DB come server invece del solito avvio e ora non ho lo stesso errore di origine. Probabilmente sta restituendo le intestazioni CORS corrette con questa impostazione. Ora ho un'altra serie di errori che mi sembrano estranei. È nella sezione degli aggiornamenti della domanda. Sai cosa c'è di sbagliato nel mio codice? – Paul

+0

Anche gli errori mi sembrano estranei. Sei sicuro di guardare nell'area giusta nella console? –

+0

Sì, stavo guardando la console corretta, ma c'era qualcos'altro che ho fatto in modo errato. Ho trascurato il fatto che in modalità server, eXist non funzionava affatto per la mia macchina. Pertanto, le mie richieste venivano inviate a un servizio inesistente. Ho finito con il problema originale, ma ho provato a eseguire il file dal localhost come consigliato e ha funzionato. Molte grazie! – Paul

Problemi correlati