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

发布于 2024-10-17 23:43:34 字数 761 浏览 5 评论 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 调用出了什么问题。WENT 通过了这个论坛上的几个 SIMILAR 问题,但没有一个对我有用。
我必须从 Google 搜索中获取 JSON 格式的结果集。

<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>

I am not able to figure out whats going wrong with this AJAX call.WENT Through several SIMILAR question on this forum, but none was working for me.
I have to Get the resultset from Google search in JSON format.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

柒七 2024-10-24 23:43:34

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

JSONP 工作的原因和方式:

  1. 浏览器允许脚本元素从另一个域获取其源。
  2. 如果 url 中的参数(通常称为“回调”)中提供了函数名称,则请求的页面将设置为将 JSON 响应包装在函数调用中。
  3. 当 dataType 为 'jsonp' 时,JQuery 创建包装函数,在 url 中添加回调参数,并在 DOM 中插入一个指向您请求的 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

The browser is dropping the request because of cross domain security policy.
Try using JSONP (dataType: "jsonp").
Ajax requests to third party websites are normally not possible because of security restrictions. But there are several client-side techniques to work around this restrictions and one of them is JSONP.
One thing you will not get from JSONP is notification of network errors or anything that responds nicely to badly formed responses, so you have to accept that as a tradeoff with the ability to invoke services on other domains.

Why and how JSONP works:

  1. Browsers allow you to have a script element get its source from another domain.
  2. The requested page is set up do wrap the JSON response in a function call if the name of the function is supplied in a parameter (usually named 'callback') in the url.
  3. When dataType is 'jsonp', JQuery creates the wrapping function, adds the callback parameter in the url and inserts a script tag in DOM pointing to the URL you requested.
  4. The browser loads the response as a script and executes it, thus calling the JQuery provided function.

See the difference in the response:
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

煞人兵器 2024-10-24 23:43:34

您应该使用 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");
    }
});

这是工作示例

来自文档:

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

数据类型字符串
您期望从服务器返回的数据类型。

You should use dataType instead of 'contentType'. Here is code:

$.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");
    }
});

Here is working example.

From documentation:

contentTypeString
When sending data to the server, use this content-type.

dataTypeString
The type of data that you're expecting back from the server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文