区分浏览器GUI请求和AJAX请求

时间:2012-03-31 08:32:28

标签: php

我的PHP脚本中区分普通浏览器GUI请求和AJAX请求的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

不是这样。

您可以编写JavaScript,以便在您可以使用的请求标头中保留某种标识符。请参阅XHR setRequestHeader方法。

很好地使用HTTP将修改Accept标头,然后进行正常的内容协商。然后(例如),你不关心是否是Ajax,你只关心HTML响应是否优于JSON响应。

另一个惯例是使用值为X-Requested-With的非标准XMLHttpRequest标头。默认情况下,许多JavaScript库会将此添加到使用XHR的任何请求中。

这些技术中的任何一种都只适用于XMLHttpRequest或基于插件的Ajax。您无法为JSON-P或基于iframe的Ajax设置任意HTTP标头。

答案 1 :(得分:0)

就服务器而言,正常请求与Javascript发起的请求之间没有特别的区别。

如果您想识别特定品牌的请求,合理的方法是传递自定义标题。

$.ajax(uri, {
  beforeSend: function(xhr) {
    xhr.setRequestHeader('X-YourApp-AJAX', '1');
 });

如果您正在使用Apache,那么检查您刚刚在PHP中设置的标头就足够了。

$headers = getallheaders();

if(isset($headers['X-YourApp-AJAX'])) {
   // AJAX request
} else {
   // ...
}

修改

看起来jQuery等已经在AJAX请求中传递X-Requested-With标头 - 优先使用它。