0
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript" language="javascript">
$.ajax({
    type: "GET",
    cache: false,
    url: 'http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=school',
    contentType: "application/json; charset=utf-8",
    success: function(msg) {
    alert(""+msg.length);
  },
  error: function (e) {
            alert("Failed to Get declassification details");
        }});
</script>
</body>
</html>

我无法弄清楚这个 AJAX 调用出了什么问题。通过SIMILAR这个论坛上的几个问题,但没有一个对我有用。
我必须以 JSON 格式从 Google 搜索中获取结果集。

4

2 回答 2

1

由于跨域安全策略,浏览器正在丢弃请求。尝试使用 JSONP(数据类型:“jsonp”)。由于安全限制,通常无法向第三方网站发出 Ajax 请求。但是有几种客户端技术可以解决这个限制,其中之一是 JSONP。您不会从 JSONP 获得的一件事是网络错误通知或任何对格式错误的响应做出良好响应的通知,因此您必须接受它作为在其他域上调用服务的能力的权衡。

JSONP 工作的原因和方式:

  1. 浏览器允许您让脚本元素从另一个域获取其源。
  2. 如果在 url 中的参数(通常命名为“回调”)中提供了函数的名称,则请求的页面已设置为将 JSON 响应包装在函数调用中。
  3. 当 dataType 为 'jsonp' 时,JQuery 创建包装函数,在 url 中添加回调参数,并在 DOM 中插入一个 script 标签,指向您请求的 URL。
  4. 浏览器将响应作为脚本加载并执行,从而调用 JQuery 提供的函数。

查看响应中的差异: http ://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=school

对比

http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=school&callback=jquery_created_function

于 2011-02-17T08:50:38.700 回答
1

您应该使用dataType而不是“contentType”。这是代码:

$.ajax({
    type: "GET",
    cache: false,
    url: 'http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=school',
    dataType: "jsonp",
    success: function(msg) {
        alert("" + msg.responseData.results.length);
    },
    error: function(e) {
        alert("Failed to Get declassification details");
    }
});

这是工作示例

从文档:

contentTypeString 向服务器发送数据时,使用此内容类型。

dataTypeString 您期望从服务器返回的数据类型。

于 2011-02-17T09:02:36.070 回答