【发布时间】:2012-04-14 19:25:11
【问题描述】:
在我的 PHP 脚本中区分普通浏览器 GUI 请求和 AJAX 请求的最佳方法是什么?
【问题讨论】:
标签: php
在我的 PHP 脚本中区分普通浏览器 GUI 请求和 AJAX 请求的最佳方法是什么?
【问题讨论】:
标签: php
不是这样的。
您可以编写您的 JavaScript,以便在您可以使用的请求标头中留下某种标识符。请参阅 XHR setRequestHeader 方法。
HTTP 的一个很好的用途是修改Accept 标头,然后进行正常的内容协商。然后(例如),您不必关心它是否是 Ajax,而只需关心 HTML 响应是否优于 JSON 响应。
另一个约定是使用非标准的X-Requested-With 标头,其值为XMLHttpRequest。默认情况下,许多 JavaScript 库会将此添加到使用 XHR 的任何请求中。
这些技术中的任何一个都只能用于 XMLHttpRequest 或基于插件的 Ajax。您不能为基于 JSON-P 或 iframe 的 Ajax 设置任意 HTTP 标头。
【讨论】:
setRequestHeader 添加新标头。
就服务器而言,普通请求和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 标头 - 优先使用它。
【讨论】:
XMLHttpRequest 对象在所有现代浏览器中实现。 IE6 不支持它by that name,但您选择的 Javascript 框架将使您无需在不存在的地方手动定义它。