【问题标题】:Controller actions being called twice --- Php application控制器动作被调用两次 --- Php 应用程序
【发布时间】:2010-08-17 16:53:10
【问题描述】:

我是新来的,所以如果我遗漏了一些信息或什么,请告诉我,我会提供。我已经在寻找有关此错误的信息,但我还没有找到任何相关的信息。 所以,这就是交易.. 我的一些控制器操作被调用了两次,我刚刚注意到,当我想知道为什么我要发送一些邮件两次(我拥有的应用程序包含一个电子邮件客户端)..只有在记录了我在做什么之后,我才注意到控制器被调用了两次......顺便说一句,这只发生在我从应用程序外部的链接或通过输入 url 调用操作时。 如果我没有说清楚或者我遗漏了什么,请务必在此处发布,以便我添加更多信息..

提前致谢!

【问题讨论】:

  • 肯定一点代码会有所帮助。你确定你不重定向回控制器吗?就像我说的发布相关代码。
  • 另外,你能发布更多关于代码库的信息吗?您是否使用了一个框架(如果是,是哪个以及哪个版本)?还有其他可能相关的细节吗?
  • 可能相关:stackoverflow.com/questions/2009092/… - 请参阅已接受的答案。 :)(其他一些想法也很好。)还有stackoverflow.com/questions/2153579/…
  • 请包含您的电子邮件页面中的代码、您的 ajax 代码以及任何可能导致重定向的身份验证系统的详细信息。

标签: php javascript css ajax


【解决方案1】:

根据我的评论汇总来自othersources 的可能答案:

  1. 和亲戚。

    如果你有生成 img 标签的 src 属性的地方,请确保它在任何异常情况下都不为空;少数浏览器将空 src 作为再次加载页面的提示。 123

    对于空的 favicon、javascript 或 css href 也是如此 - 通常是您要求浏览器获取外部资源但未提供 url 的任何内容,即使在 css 中也是如此1.

    如果您考虑一下,例如,当您执行

    (甚至只是
    ) - 即同一页面。

  2. .htaccess 恶作剧。

    检查您的重写规则:您是否让服务器往返您的脚本以获取任何静态内容(例如 favicon1)?不存在的文件是否会触发对您的脚本的调用,并且是指向一个外部资源链接(例如,一个古老的 css 样式表最终从文件系统中删除但有人忘记将其从 HTML 源中删除)?

  3. 基于浏览器的调试器。

    一些基于浏览器的调试器,例如firebug1,将根据情况向页面发送第二个请求,以收集浏览器本身未提供给它们的数据。确保你没有得到那个。

看看这些对你有没有帮助。

【讨论】:

  • 非常感谢。我有同样的问题,但在codeigniter。我调用了一个控制器,但控制器被调用了两次。问题是格式错误的 src 标签非常感谢:D
【解决方案2】:

对我来说,打开 Firebug 会导致页面被调用两次。

【讨论】:

    【解决方案3】:

    没有看到实际的应用程序代码,我只能简单地猜测 - 但是,我知道这个领域中至少有一个半著名的错误,请参阅 http://blog.codekills.net/archives/27-Fun-with-Firefox-Jitters.html 了解详细信息 - 基本上,它发生在 @987654322 @ 有一个 onclick 处理程序和一个 <a> 在里面,它们指向同一个 URL……即使这不是你的应用程序所做的,也许你可以从他们如何调试问题中获得一些见解。

    【讨论】:

    • 很抱歉,我没有提供任何应用程序代码......但是代码太大了呵呵......这就是为什么我在寻找像你这样的更通用的答案。好的,当我关闭 JS 时,它调用了一次控制器动作,但是当然,没有完成加载整个页面..所以我通过 FireBug 检查了 AJAX 再次调用控制器动作。好像我越来越接近解决方案了..谢谢!还要检查您提到的 onclick 内容
    • Bleh.. 我已经用 FireBug 调试了 JS .. 一切看起来都很好.. 这意味着它正在做类似的事情: 1- 调用控制器操作 2- 遍历所有 javascript 代码 3- 调用控制器动作再次仍然卡住:/
    • 用 LiveHttpHeaders 捕获历史并将其发布以便我们可以看到请求链?
    【解决方案4】:

    经过数小时的调试,我的问题是动态设置的背景图像 css 标记。如果没有图像 - background-image:url() - 一旦页面被加载,第二个请求将被发送回控制器。

    以防万一其他人也这样做。

    【讨论】:

      【解决方案5】:

      我的特定版本的问题并修复

      • 提交此表单在生产服务器上工作,但不是“本地主机”
      • 对于 Firefox:表单在这两个地方都有效。对于 Chrome:仅适用于生产服务器
      • 在我的问题控制器中设置断点确认它被多次调用 (duh),结果该表单上的 CSRF 保护被乱码。

      然后我找到了这个帖子:http://ellislab.com/forums/viewthread/210318/

      我的解决方案涉及网站图标。 src 属性不太正确。我确实在根目录中有一个网站图标,它加载在主页上,但没有加载到其他网站上(有一段时间没有注意到)。无论如何,提供一个 favicon 的绝对路径解决了它

      真的不知道您是否必须有一个 favicon,但如上所述,请确保正确引用您拉入的任何资源 (img/js/css),以避免浏览器重试请求页面

      【讨论】:

        【解决方案6】:

        在我的代码点火器视图中,我有一个表单。该表单有一个 Post 方法调用控制器 A 的 url。单击表单中的添加按钮时,我正在调用一个验证电子邮件 ID 的 Javascript 函数。在 .js 中验证电子邮件后,我使用 $.post(url...) 将一些数据发布到 controllerA 以进行数据库插入。插入发生了两次。

        原来在 $.post(url) 中我调用了 controllerA url。 当我评论 $.post 时,数据库插入工作正常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多