2012-03-31 129 views

回答

5

不一样。

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

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

另一个约定是使用值为XMLHttpRequest的非标准X-Requested-With标头。许多JavaScript库会默认将这个添加到使用XHR的任何请求中。

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

+0

感谢您的信息。那么使用JavaScript发送'X-Requested-With'头部在所有浏览器中都可靠吗?或者会使用额外的GET参数,例如:my_page.php?request_method = ajax会更可靠吗? – Mark 2012-03-31 08:53:27

+0

很好地支持用'setRequestHeader'添加新的头文件。 – Quentin 2012-03-31 09:00:59

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头 - 使用优先。

+0

这似乎是一个很好的解决方案。那么xhr.setRequestHeader('X-YourApp-AJAX','1');在所有浏览器上工作? – Mark 2012-03-31 08:55:43

+0

底层XMLHttpRequest对象在所有现代浏览器中都可以实现。 IE6不支持[通过该名称](http://msdn.microsoft.com/en-us/library/ms537505(v = vs.85).aspx),但您选择的Javascript框架将为您节省时间需要手动定义它不存在的地方。 – cantlin 2012-03-31 09:04:08

相关问题