【问题标题】:Symfony $request->isXmlHttpRequest() issueSymfony $request->isXmlHttpRequest() 问题
【发布时间】:2011-06-07 05:23:52
【问题描述】:

我需要检查请求是否是 ajax。 $request->isXmlHttpRequest() 工作正常,但是如果在执行过程中某处有重定向,此方法将返回 false。在这种情况下,我还能如何检查请求是否是 ajax? p.s. ajax由jQuery发起

【问题讨论】:

    标签: jquery symfony1


    【解决方案1】:

    如果您没有重定向到项目中的其他应用程序或另一个外部 uri,则如果 isXmlHttpRequest 在第一个请求上为 true,则使用 forward 代替。


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

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

    【讨论】:

    • 没错,Firefox 是罪魁祸首。在 Opera 中测试相同,工作正常。
    • @Dziamid:是的,有一个错误提交,但它错过了 FF4 版本,所以在修复之前它至少是 4.1。此外,可能还有其他浏览器也会发生这种情况,尽管我不知道任何其他浏览器。所以我会用你的解决方法保守一点。实际上,如果可能的话,我可能会从方程式中删除重定向。
    • 我禁止我的头反对它,但无济于事。显然,将自定义请求参数设置为请求对象并没有帮助 - 它们通过重定向很清楚。使用 sf_format 是一种复杂的方式(因为 symfony 会寻找不同的模板,比如 indexSuccess.sf_format.php)..
    • 那么您需要在传递给重定向的 url 中对该参数进行编码。您是否正在重定向到项目中的其他应用程序?否则为什么不使用forward 而不是isXmlHttpRequest 在第一个请求中为真?
    • 您可以通过返回sfView::NONE 并使用setLayout(false) 在操作中覆盖它,如果sf_format 是您用于ajax 的任何内容。但我的意思是使用 sf_Format 并没有那么特别,它与手动添加一些您将用来检测 ajax 的任意参数做同样的事情 - 它已经存在了。
    【解决方案2】:

    一些 js 库不会在标头中发送 XmlHttpRequest 值,只需将其添加到您的脚本中即可:

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

    【讨论】:

      【解决方案3】:

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

      使用像http://mywebsite.com/loadsomething.php?ajax=true 这样的网址和

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

      或者,如果您正在发布,您可以创建一个名为 "ajax" 的隐藏字段。当然,这些不会永远解决您的问题,但如果您需要尽快解决,它们可以作为快速解决方案。

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

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

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

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

      【讨论】:

      • 因为它们被某些浏览器清除,如@prodigitalson(参见另一个答案)。这个问题与 Symfony 无关。
      • 不,我没有说这与 Symfony 有任何关系。我只是说我从哪里开始追问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2011-08-31
      • 2011-06-20
      • 1970-01-01
      • 2011-12-19
      • 2018-11-12
      • 2021-12-08
      相关资源
      最近更新 更多