【问题标题】:cross domain jquery get跨域jquery获取
【发布时间】:2013-02-28 11:00:51
【问题描述】:

我看到了一些使用 ajax 的跨域示例,但它不起作用。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    </head>
    <body>
        <script type="text/javascript" >
            $(document).ready(function () {
                var url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=AssasNet&include_rts=1";

                $.get(url, function (data) {
                    console.log(data)
                    alert(data);
                });
            });
        </script>
    </body>
</html>

我在 chrome 上试了下,出现以下错误:

XMLHttpRequest cannot load http://api.twitter.com/1/statuses/user_timeline.json?screen_name=AssasNet&include_rts=1. Origin null is not allowed by Access-Control-Allow-Origin. 

【问题讨论】:

  • 你从哪里得到这个例子?不正确
  • 你必须专门设置外部服务器才能使用跨域AJAX,你不能在这里做。 Use JSON-P instead.
  • 也只有声明。不是一个实际的问题。只是建议“哪里有错误”
  • 确保您没有使用 chrome 和 locahost 进行测试。 Chrome 不支持 localhost 上的跨域请求是一个已知问题
  • @JeremyBlalock:FWIW,Twitter API 也不支持来自 http://jsbin.com 的调用,所以我怀疑它只是不支持 CORS。

标签: javascript jquery ajax twitter


【解决方案1】:

您不能使用 $.get,因为它会进行 ajax 调用,这将是跨域的,因此被 Same Origin Policy 阻止,并且您尝试访问的 Twitter API 不支持 Cross-Origin Resource Sharing (或者如果它允许,它不允许来源null 或http://jsbin.com,这是我尝试过的)。

不过,API 确实支持 JSONP(这不是真正的 ajax 调用),因此只需将 $.get 更改为 $.ajax 并指定 JSONP 即可:

$.ajax({
  url: url,
  dataType: "jsonp",
  success: function (data) {
    console.log(data)
    alert(data);
  }
});

Live Example | Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    相关资源
    最近更新 更多