我的PHP脚本中区分普通浏览器GUI请求和AJAX请求的最佳方法是什么?
答案 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
标头 - 优先使用它。