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