Symfony $ request-> isXmlHttpRequest()问题

时间:2011-01-11 14:43:05

标签: jquery symfony1

我需要检查请求是否是ajax。 $request->isXmlHttpRequest()工作正常,但是如果在执行期间某处有重定向,则此方法将返回false。在这种情况下,如何检查请求是否为ajax? 附: ajax由jQuery启动

3 个答案:

答案 0 :(得分:8)

如果您没有重定向到项目中的其他应用程序或其他外部uri,则只需使用forward,如果第一次请求时isXmlHttpRequest为true。


那个方法会检查X-Requested-with标头的值,并且在某些浏览器实现中,标头(或所有原始标头)从重定向的请求中删除/覆盖(FF到名称1)。

作为一种解决方法,您可以在请求中使用变量。您可能可以使用现有的sf_format基础架构,但我不确定这是否可行,因为我不熟悉它在内部的工作方式。

答案 1 :(得分:7)

某些js库不会在标头中发送XmlHttpRequest值,juste会在脚本中添加它:

xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");

答案 2 :(得分:2)

如果您需要一个简单的解决方法,我建议

使用http://mywebsite.com/loadsomething.php?ajax=true

等网址
$isAjax = $request->getParameter('ajax');

或者,如果您正在POST,则可以创建名为“ajax”的隐藏字段。当然,这些不会永远解决您的问题,但如果您需要尽快解决问题,可以快速解决问题。

如果您只想支持一个重定向,您也可以创建一个Flash变量。

否则你可以查看symfony的源代码:

http://trac.symfony-project.org/browser/branches/1.4/lib/request/sfWebRequest.class.php

在第518行,您可以看到请求对象从HTTP标头中识别出是ajax的请求。所以你必须在重定向之后发现为什么没有正确设置相同的HTTP头。