为什么这个JQuery Ajax调用不起作用?

时间:2011-02-17 08:47:21

标签: jquery simpletest google-search

<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调用出了什么问题.WENT在这个论坛上通过几个SIMILAR的问题,但没有一个对我有用。
我必须以JSON格式从Google搜索中获取结果集。

2 个答案:

答案 0 :(得分:1)

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

JSONP为何以及如何运作:

  1. 浏览器允许您让脚本元素从其他域获取源。
  2. 如果在url中的参数(通常名为“callback”)中提供了函数的名称,则设置请求的页面在函数调用中包装JSON响应。
  3. 当dataType为'jsonp'时,JQuery创建包装函数,在url中添加callback参数,并在DOM中插入指向您请求的URL的脚本标记。
  4. 浏览器将响应作为脚本加载并执行,从而调用JQuery提供的函数。
  5. 查看响应的不同之处: http://ajax.googleapis.com/ajax/services/search/local?v=1.0&q=school

    VS

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

答案 1 :(得分: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");
    }
});

以下是example

来自文档:

  

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

     

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