2012-05-30 26 views
6

Estoy tratando de recuperar una respuesta XML utilizando ajax llamadas a la API REST eXist DB (1).XMLHttpRequest no se puede cargar http: // localhost: 8080/exist/rest/db/.... Origen nulo no permitido por Access-Control-Allow-Origin

Google Chrome me proporciona el siguiente error de consola:

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 

Mientras Firebug en Firefox proporciona el error siguiente consola:

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

Aquí es la parte de Ajax del código:

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

He leído algunos problemas relacionados en este mismo problema, pero no he encontrado ninguna suerte con la solución que probé.

El index.html que contiene el segmento de código Ajax anterior se accede desde mi máquina local como sigue:

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

me han tratado la ejecución de cromo de la siguiente manera:

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

Además, he intentado para implementar el archivo en un host en línea para que esté ubicado en

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

El más cercano La solución que tuve fue cambiar el tipo de datos de xml a jsonp. El Reponse se recibió, pero ya que se espera que sea xml, el error se relacionó con el análisis sintáctico, creo, con la siguiente afirmación devuelto por la consola de Google Chrome:

Uncaught SyntaxError: Unexpected token < 

y la consola de Firebug:

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

Volviendo a mi pregunta, ¿cómo puedo recuperar correctamente el documento xml a través de eXist DB? ¿Qué estoy haciendo mal?

Esperamos su ayuda. Soy bastante nuevo en el desarrollo web y me estoy quedando sin ideas.

¡Gracias de antemano!

Otras notas:

Los jquery.min.js que estoy usando se encuentra en http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js

Los URI http://localhost:8080/exist/rest/db/movies?_query=%2Fmovies obras, cuando introducido directamente en cualquier navegador.

Referencia:

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

Actualizaciones (1) Parece que yo era capaz de deshacerse del problema CORS ejecutando DB existo como un servidor de la siguiente manera: bin/server.sh (en UNIX) o bin \ server.bat (en Windows).

Ahora, me encuentro con otro tipo de problema. Me sale el siguiente error en la consola de Google Chrome utilizando 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 

y utilizando 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 

¿Qué significa el error? ¿Qué parte de mi código estoy haciendo incorrectamente?

(2) Actualización 1, al parecer, es un problema innecesario al que me enfrenté. El modo de servidor no funcionaba con mi máquina, por eso aparecieron los errores anteriores.

+0

posible duplicado de [XmlHttpRequest error: Origen nulo no está permitido por Access-Control-Allow-Origin] (http://stackoverflow.com/questions/3595515/xmlhttprequest-error-origin-null-is-not-allowed -by-access-control-allow-origin) – jrummell

Respuesta

4

Esta es una solicitud entre dominios y no está permitida. Prueba de localhost en lugar de file: //. Además, el servidor remoto debe devolver los encabezados CORS adecuados si está destinado a trabajar entre dominios con cualquier tipo de datos que no sea JSONP. El tipo de datos JSONP no está destinado a devolver XML.

+0

Gracias. Pude leer acerca de CORS. Luego traté de ejecutar eXist DB como servidor en lugar del arranque habitual y ahora no obtengo el mismo error de origen. Probablemente devuelva los encabezados CORS correctos con esta configuración. Ahora, tengo otro conjunto de errores que me parecen extraños. Está en la sección de actualizaciones de la pregunta. ¿Sabes lo que todavía está mal en mi código? – Paul

+0

Los errores me parecen extraños también. ¿Estás seguro de que estás mirando el área correcta en la consola? –

+0

Sí, estaba mirando la consola correcta, pero había algo más que hice mal. Pasé por alto el hecho de que en el modo de servidor, eXist no funcionaba para mi máquina. Por lo tanto, mis solicitudes se enviaban a un servicio inexistente. Terminé con el problema original, pero traté de ejecutar el archivo desde el host local como me aconsejó y funcionó. ¡Muchas gracias! – Paul

Cuestiones relacionadas