【问题标题】:Ajax with JQuery: 200 ok, but not "success"带有 JQuery 的 Ajax:200 正常,但不是“成功”
【发布时间】:2011-06-17 23:16:55
【问题描述】:

我正在尝试使用 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 ok 的状态,但它并没有达到那个“成功”的路径。有谁知道为什么?

编辑:我应该补充一点,如果我直接跟随 URL,到 http://books.google.com 等带有一些随机 q,它会毫无问题地显示提要 XML,因此查询不是问题。

【问题讨论】:

  • 尝试添加错误函数,看看是否会触发。
  • 在标准浏览器安全设置下,您不能使用 XMLHttpRequest 进行跨域请求。我看不出你是如何获得 200 OK,这个 sn-p 对我来说失败并出现安全错误。
  • 添加错误处理程序?我添加了error: function(data, status){ alert(status); },这是我在此页面上的 Firebug 中测试时为我调用的。
  • 我也面临同样的问题兄弟!你在服务器端代码中找到了吗?

标签: ajax jquery google-books


【解决方案1】:

您不能在标准浏览器安全设置下使用 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

【讨论】:

  • 感谢您的快速回复!我设置了另一个 PHP 页面来直接与 Google 图书交互,现在它运行良好。
  • 看起来你有一些链接腐烂在那里.. 404.
【解决方案2】:

这是一个 ajax 调用的跨域问题,因为浏览器有一个基于域策略的安全模型。

如果您不想包含整个 Google Books API,您还可以使用带有 jsonp 的 Google Ajax API 进行跨域 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!

【讨论】:

    猜你喜欢
    • 2012-03-10
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 2020-04-16
    • 2015-01-31
    • 1970-01-01
    • 2011-09-22
    • 2015-07-29
    相关资源
    最近更新 更多