【问题标题】:Jquery ajax cross domain calls fail [duplicate]Jquery ajax跨域调用失败[重复]
【发布时间】:2012-04-14 03:09:03
【问题描述】:

可能重复:
JQuery ajax cross domain

我需要通过 ajax 从其他网站加载内容。下面的代码仅适用于 localhost url,但不能打开 google.com 之类的 url

$.ajax({
    url: urlLeft,
    crossDomain:true,
    success: function(data){
        var loadedId = createLoadedPage();
        data = data.replace(/<script.*?>|<\/script>/mgi,'');
        data = data.replace(/.*<body.*?>|<\/body>.*/gi,'');
        $('#'+loadedId).html(data)
        $('#content_left').html($('#'+loadedId+' #snapwrap_outer').html());
        removeLoadedPage(loadedId);
    },
    dataType: 'html'
});

【问题讨论】:

  • 我不确定,但我认为 crossDomain 的工作方式是您的网站服务器应该执行重定向到所需的 url。
  • 解决方案必须考虑您在远程服务器上的权限。您不能使用 ajax 向不同的域发出请求,除非您可以控制修改服务器应答(标头)以允许您使用远程资源。一种解决方案是使用中间人脚本,一种类似于代理的机制来调用本地 ajax 调用并使用 cURL 之类的东西检索远程源。

标签: jquery ajax


【解决方案1】:

那是因为Same Origin Policy,在您的情况下,这基本上意味着您不能在您的域之外进行 ajax 调用,因为浏览器不会让您这样做。你无法绕过这一点。

解决方案是将您的远程调用委托给例如 PHP 脚本(与需要执行的 ajax 调用位于同一位置),该脚本将为您访问数据,并通过 ajax 调用访问该脚本.

【讨论】:

    【解决方案2】:

    由于same origin policy restriction,您无法发送跨域 AJAX 请求。这是一个guide,您可以查看一下您可以使用的一些可能的解决方法。

    【讨论】:

    • 但我确实可以设置 jsonp 并进行这样的跨域调用
    • @OleksandrKhavdiy,这就是 JSONP 的重点,请参阅:en.wikipedia.org/wiki/JSONP
    • 您必须控制远程地址才能使用 JSONP。远程服务器必须发送 JSONP 而不是 JSON。如果您无法控制远程域,则无法使用它。
    猜你喜欢
    • 2011-03-22
    • 1970-01-01
    • 2013-11-27
    • 2013-12-07
    • 2012-06-05
    • 2017-03-31
    • 2016-01-26
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多