Estoy tratando de usar AJAX para enviar una consulta a Google Books y mostrar los resultados en mi sitio web. Estoy usando JQuery para enviar la solicitud y manejar la respuesta, así:
var query = [formatted input from a form]; var URL = "http://books.google.com/books/feeds/volumes?q="+query+"&start-index=1&max-results=5"; $.ajax({ type: "GET", url: URL, dataType: "xml", success: function(data, status){ alert(status); } });Actualmente, solo tengo el script que alerta "éxito" si se recibe una respuesta. Si uso mi secuencia de comandos para enviar esa consulta a una página local para probarla, esto funciona bien. Pero cuando configuro la URL en la de Google mencionada anteriormente, como se indica en la página de la API del desarrollador, nunca veo la alerta. Según Firebug, estoy recibiendo una respuesta y un estado de 200 ok como debería, pero no estoy llegando a ese camino de "éxito". ¿Alguien sabe por qué?
Editar: debo agregar que si sigo la URL directamente, a http://books.google.com , etc. con alguna q aleatoria, muestra el XML del feed sin problemas, por lo que la consulta no es el problema.
No puede realizar solicitudes entre dominios mediante XMLHttpRequest con la configuración de seguridad estándar del navegador. Una posible solución es escribir una función de proxy local (suponiendo que pueda crear un código del lado del servidor) que reenvíe la consulta al sitio externo y luego devuelva la respuesta.
Editar : parece que Google también proporciona una API de JavaScript. Asumiría que se han diseñado de tal manera para evitar el problema de XHR entre dominios.
http://code.google.com/apis/books/docs/js/devguide.html#ejecutar
Editar : la API de JavaScript para libros quedó obsoleta. Si bien ya no es útil en la práctica, puede ver el texto original de la documentación a la que se hace referencia a través del archivo de Wayback Machine: http://web.archive.org/web/20120414070427/http://code.google.com/apis/books/docs /js/devguide.html#ejecutar
Es un problema entre dominios con llamadas ajax porque los navegadores tienen un modelo de seguridad basado en una política de dominio.
si no desea incluir toda la API de Google Books, también puede usar la API de Google Ajax con jsonp para llamadas ajax entre dominios.
http://code.google.com/apis/books/docs/js/jsondevguide.html#basic_query
var query = 'jquery'; var URL = 'https://ajax.googleapis.com/ajax/services/search/books?v=1.0&q=' + query; $.ajax({ type: 'GET', url: URL, dataType: 'jsonp', success: function( data, status ){ alert( data.responseData.results.length + ' results found!' ); }, error: function() { alert( 'Something goes wrong!' ); } });¡Ciao!