如果请求是AJAX请求,我在动作中有不同的逻辑
(对于AJAX登录,我不需要在成功登录后重定向,例如,在正常登录中不是这种情况。)
除了检查X-Requested-With: XMLHttpRequest
的标题之外,最好的方法是什么
有旗帜还是什么?
答案 0 :(得分:6)
This method通过检查几乎(如果没有)所有主要JS库(包括jQuery和YUI)设置的标头来工作。
$this->getRequest()->isXmlHttpRequest() //returns true if is XHR
smack0007详细说明的方法保证准确,但如果连接始终由设置标题的库进行连接,则上述方法很好。它可能不适合公共API。
答案 1 :(得分:3)
没有一种可靠的方法可以区分它们;浏览器对XMLHttpRequest和普通访问使用几乎相同的HTTP代码。
由于自定义标头的浏览器处理方式不同,以及潜在的代理干扰,我不相信X-Requested-With标头可以在所有情况下完成。 (这就是实际上正在寻找的XmlHttpRequest。)
相反,我会使用参数(?ajax = 1)或其他生成唯一网址的方法,例如smack的建议。
答案 2 :(得分:1)
通常我为我的应用创建两个入口点:/index.php和/ajax/index.php。它们共享一个共同的引导程序,但在ajax.php中我设置了一个FrontController参数,说这个请求是一个ajax请求。
然后我可以使用Request对象签入。
if($this->getRequest()->getParam('ajax')) {
// Ajax request
} else {
// Normal request
}
答案 3 :(得分:1)
Zend_Controller_Request_Http类有一个名为isXmlHttpRequest()的方法,它应该告诉你请求是否来自Javascript(ajax)。
(不练习编码但是)你的行动可能会是这样的:
if($this->getRequest()->isXmlHttpRequest()){
//is ajax
}
else{
//regular request
}