【问题标题】:Can a site block an ajax call referring to another, third party site?站点可以阻止引用另一个第三方站点的 ajax 调用吗?
【发布时间】:2011-04-07 02:23:17
【问题描述】:

所以我有一个书签似乎在某些网站上不起作用。

这就是发生的事情。 bookmarklett(存在于您的书签栏上)会触发一个 javascript 序列,该序列将在您当前所在的任何页面上构建一个包含内容的 div。 构建 div 后,它将向 my 服务器上的 php 页面发送 ajax GET 请求(也就是说,加载 bookmarlett 的页面在我的服务器中是 not ,这是其他地方,ajax 请求来自 my 服务器的数据发送到加载小书签的网站)。

显然,我自己没有看到这个错误,我被告知无法接收到ajax调用,因此没有将动态数据传递到我构造的div中。

事件顺序如下: 书签单击 -> 在正在查看的页面上创建一个模式弹出 div -> 运行对 my 服务器的 ajax 调用,传递用户的唯一 ID 以检索一些数据 -> 然后填充动态内容此检索到的数据。

显然,在某些网站上,ajax 请求从未收到回。

某些网站可以阻止我的小书签通过 ajax 从我的网站收集数据吗? 网站是否有可能弄乱了向我的服务器发送响应的请求?

如果是这样,有什么解决方法吗?还是我需要把它全部扔掉。

这就是我的 ajax 请求的工作方式,我没有看到它失败了,但显然它失败了。这可能是用户部分的错误(可能已经触及了一些代码提供要与 GET 请求一起发送的数据,但我不确定)

jquery.ajax({
    type:"GET",
    url:"mysite.com/api/getStuff",
    data:"format=jsonp&userid=1234",
    success:function(data){
         // do stuff with the retrieved data
    },
    error:function(err, msg){
         // response was not received
    }
});

【问题讨论】:

    标签: php jquery ajax codeigniter get


    【解决方案1】:

    XMLHTTPRequest 受制于大多数浏览器强加的same origin policy。出于安全原因,它将 XHR 限制为与原始页面请求相同的协议、域和端口。

    访问我提供的链接也会让您开始寻找解决方法,如果这是您想做的事情。

    【讨论】:

      【解决方案2】:

      跨域 ajax 请求受到限制。使用 'jsonp' 或 'script' 数据类型。

      注意“跨域请求和dataType:”jsonp”请求不支持同步操作”。更多信息请关注官方jquery documentation

      【讨论】:

        【解决方案3】:

        根据经验,我知道一些 mod_rewrite rulz 搞砸了我的 ajax 请求,我认为您在使用 ajax + mod_rewrite 时可能会遇到一些问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-16
          • 1970-01-01
          • 1970-01-01
          • 2020-02-12
          • 2020-12-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多