在控制器内部,知道请求是否是XMLHTTP(ZF)的最佳方法是什么?

时间:2009-08-24 14:52:25

标签: php ajax zend-framework

如果请求是AJAX请求,我在动作中有不同的逻辑 (对于AJAX登录,我不需要在成功登录后重定向,例如,在正常登录中不是这种情况。)
除了检查X-Requested-With: XMLHttpRequest的标题之外,最好的方法是什么 有旗帜还是什么?

4 个答案:

答案 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
}