我正在尝试使用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);
}
});
目前,如果收到回复,我只是提示脚本提示“成功”。如果我使用我的脚本将该查询发送到本地页面进行测试,这样就可以了。但是,当我按照开发人员API页面上的说明将URL设置为上面列出的Google时,我从未看到警报。根据Firebug的说法,我收到了一个响应和200个确定的状态,但是它没有达到那个“成功”的道路。有谁知道为什么?
编辑:我应该补充一点,如果我直接关注网址,http://books.google.com等等,并使用一些随机q,它会显示Feed XML并没有问题,因此查询不是问题。
答案 0 :(得分:14)
您无法在标准浏览器安全设置下使用XMLHttpRequest发出跨域请求。一种可能的解决方案是编写本地代理函数(假设您可以创建服务器端代码),将查询转发到外部站点,然后返回响应。
修改:Google似乎也提供了JavaScript API。我认为他们是以避免跨域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
答案 1 :(得分:3)
这是ajax调用的跨域问题,因为浏览器具有基于域策略的安全模型。
如果你不想包含整个Google Books API,你也可以使用带有jsonp的Google Ajax API进行跨域ajax调用。
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!' );
}
});
侨!