Ajax с JQuery: 200 нормально, но не "успех"
Я пытаюсь использовать AJAX для отправки запроса в Google Книги и отображения результатов на моем веб-сайте. Я использую JQuery для отправки запроса и обработки ответа, например:
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);
}
});
В настоящее время я получаю сообщение script "успех", если получен ответ. Если я использую свой script для отправки этого запроса на локальную страницу для тестирования, это работает отлично. Но когда я установил URL-адрес Google, указанный выше, как указано на странице API-разработчика, я никогда не вижу предупреждения. Согласно Firebug, я получаю ответ и статус 200 нормально, как и следовало бы, но это не доходит до этого "успешного" пути. Кто-нибудь знает, почему?
Изменить: я должен добавить, что если я буду следовать за URL-адресом напрямую, http://books.google.com и т.д. с некоторым случайным q, он отобразит фид XML без проблем, поэтому запрос не является проблемой.
Ответы
Ответ 1
Невозможно выполнить междоменные запросы с использованием XMLHttpRequest в стандартных настройках безопасности браузера. Одним из возможных решений является запись локальной прокси-функции (при условии, что вы можете создать код на стороне сервера), которая перенаправляет запрос на внешний сайт и затем возвращает ответ.
Изменить. Похоже, Google предоставляет API JavaScript. Я бы предположил, что они созданы таким образом, чтобы избежать проблемы междоменного XHR.
http://code.google.com/apis/books/docs/js/devguide.html#execute
Изменить. JavaScript API для книг был устаревшим. Хотя это уже не является практически полезным, вы можете увидеть исходный текст документации по ссылке через архив Wayback Machine: http://web.archive.org/web/20120414070427/http://code.google.com/apis/books/docs/js/devguide.html#execute
Ответ 2
Это междоменная проблема с вызовами ajax, поскольку браузеры имеют модель безопасности, основанную на политике домена.
Если вы не хотите включать весь API Google Книги, вы также можете использовать API Ajax Google с jsonp для межсетевых вызовов ajax.
Документы здесь:
http://code.google.com/apis/books/docs/js/jsondevguide.html#basic_query
Пример jQuery
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!