网站是否可以阻止指向另一个第三方网站的ajax呼叫?

时间:2011-04-07 02:23:17

标签: php jquery ajax codeigniter get

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

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

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

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

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

有些网站会阻止我的bookmarklett通过我网站的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
    }
});

3 个答案:

答案 0 :(得分:1)

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

如果您想要这样做,访问我提供的链接也会启动您找到解决方法。

答案 1 :(得分:1)

Crossdomain ajax请求受到限制。使用'jsonp'或'script'dataType。

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

上找到

答案 2 :(得分:0)

我从经验中知道一些mod_rewrite rulz弄乱了我的ajax请求,我想你可能在使用ajax + mod_rewrite时遇到一些问题。