jQuery.ajax - 为什么它不起作用?

时间:2012-03-30 08:31:07

标签: javascript jquery ajax cross-browser

我无法让ajax服务工作。 $.get("http://google.com")的简单类不起作用。此外,此代码也不起作用:

<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    </head>
    <body>
        <script>

        $.ajax({
            url:        "http://google.com",
            dataType:   "html",
            success:    function(data, status) {
                console.log("Success:");
                console.log("    Data: " + data);
                console.log("    Status: " + status);
            },
            error:      function(request, status, error) {
                console.log("Error:");
                console.log("    Request: " + request);
                console.log("    Status: " + status);
                console.log("    Error: " + error);
            },
        });

        </script>
    </body>
</html>

保存在test.html

这是控制台上的输出:

Error:
    Request: [object Object]
    Status: error
    Error:

我猜这些是返回对象的重要值:

readyState          0
responseText        ""
status              0
statusText          "error"

为什么请求不起作用? 谢谢,

3 个答案:

答案 0 :(得分:3)

您不能使用AJAX来访问这样的跨域脚本。这是因为Same Origin Policy - 出于安全原因而实施的内容:

  

这种机制对现代网络具有特殊意义   广泛依赖HTTP cookie维护的应用程序   经过身份验证的用户会话,因为服务器基于HTTP cookie   显示敏感信息或改变状态的信息   动作。严格区分不相关的内容   必须在客户端维护站点以防止数据丢失   机密性或完整性。

所以你有几个选择:

  1. 只需在您自己的服务器上调用脚本
  2. 在您的服务器上调用可与第三方网站/应用/脚本进行通信的脚本
  3. 使用JSONPXML作为回调格式。

答案 1 :(得分:1)

由于same-origin-policy,您无法向其他域发出请求。有关详细信息,请参阅http://api.jquery.com/jQuery.ajax/

答案 2 :(得分:1)

您可以使用JSONP实现跨域通信。

  

http://en.wikipedia.org/wiki/JSON#JSONP

但是对于普通的HTML,你可能会在同一个域中。

 $.ajax({
        url:        "http://google.com",
        dataType:   "jsonp",
        success:    function(data, status) {
            console.log("Success:");
            console.log("    Data: " + data);
            console.log("    Status: " + status);
        },
        error:      function(request, status, error) {
            console.log("Error:");
            console.log("    Request: " + request);
            console.log("    Status: " + status);
            console.log("    Error: " + error);
        },
    });

编辑:

但是如果您的URL未返回有效的格式化json,则您的请求将失败。 有关工作示例,请检查:

  

http://jsfiddle.net/S3tAR/1/