Php 如何知道是否正在使用AJAX请求访问站点

Php 如何知道是否正在使用AJAX请求访问站点,php,jquery,ajax,api,jsonp,Php,Jquery,Ajax,Api,Jsonp,所以,我有一个用于我的topsite的API,我给我的用户放在他们的页面上 API: var-id=21; $(文档).ready(函数(){ $.getJSON(“http://topsite.com/index.php?page=vote“,{id:id,hasvoluted:'未知'},函数(数据){ 如果(数据==2){ window.location.replace(“http://topsite.com/index.php?page=vote&id=“+id); } }); });

所以,我有一个用于我的topsite的API,我给我的用户放在他们的页面上

API:


var-id=21;
$(文档).ready(函数(){
$.getJSON(“http://topsite.com/index.php?page=vote“,{id:id,hasvoluted:'未知'},函数(数据){
如果(数据==2){
window.location.replace(“http://topsite.com/index.php?page=vote&id=“+id);
}
});
});

所以,基本上我想做的是避免我的客户在他们的网站上放置此代码:

<script type="text/javascript">$.getJSON("http://topsite.com/index.php?page=vote&id=21");</script>
$.getJSON(“http://topsite.com/index.php?page=vote&id=21");
因为我希望用户被重定向到我的网站,这样我就可以从广告中赚些钱,甚至向他们展示一些信息

因此,我想知道是否有任何方法可以知道何时使用ajax请求访问站点,或者如果设置了hasVote参数,是否有方法禁用ajax请求

感谢您的帮助,谢谢

编辑:当使用“HasVote”参数从站点重定向到其他页面时,我将发送自定义标题


编辑问题:我将如何继续发送带有位置的自定义标题?或者我离这里很远吗?

也许通过检查用户代理?

首先,ajax请求不会像那样跨域工作。除了topsite.com及其子域之外,该代码不适用于任何网站


但是,没有什么可以阻止任何人通过服务器端脚本解析内容。而且没有可能完全阻止人们下载它(你可以让它变得困难,但只要它是公开的,人们就可以下载)

非正式地,许多AJAX库添加了一个名为
X-request-With
的自定义HTTP头,并将值设置为
XMLHttpRequest
。您可以检查该头并查看它是否设置为该值,在这种情况下,一个好的假设是它是一个AJAX请求


但是,没有标准,如果您直接构建XMLHttpRequest(即,实现您自己的AJAX代码),那么就没有真正的方法来判断。

@Manuel,这对我来说是一个错误,因为跨域策略问题,它无法访问域。是一个虚拟域名,不是我的网站,因为我不需要它来发布域名。它甚至没有提出请求。。。实际的领域是不相关的。domainx.com无法对domainy.com进行ajax调用。正如我、Eli和NiftyDude所指出的,它被所有现代浏览器使用的同源策略所锁定。那么请告诉我50多个站点是如何使用API的,并且一切都很好。实际上,这50个站点包括一个脚本,但没有让用户的浏览器发出http请求,没有?我实际上正在考虑在设置'hasvolute'参数时发送一个自定义HTTP头。然后在另一页检查它是否设置好了,这样行吗?行。已经为其他目的这样做了(如果请求是否由特定ajax请求发出,则发送不同的模板),但请注意,即使这样也可能是伪造的。。如果有人查看HasVote请求或标题。。然后他可以添加它。我想如果有人真的想伪造身份来获取你的数据,你将很难避免。我明白了。嗯,我宁愿让任何想这样做的人都很难做到。顺便问一下,我将如何继续发送带有位置的自定义标题?还是我离这里很远?问题添加到了主帖子中。可能(或不是)有兴趣:如果您做了类似(这很糟糕…)的事情,比如在DOM就绪时使用ajax请求或其他什么,有效地获取页面中的de数据?getJSON不执行客户端JS,对吗?
<script type="text/javascript">$.getJSON("http://topsite.com/index.php?page=vote&id=21");</script>