【问题标题】:Theoretical issue about Ajax with custom php MVC关于 Ajax 与自定义 php MVC 的理论问题
【发布时间】:2011-12-12 18:13:52
【问题描述】:

我正在构建我的第一个 AJAX 网站,并在其中实现了自定义 MVC。

基本上,我使用 AJAX(通过 jQuery)将该部分发送到一个大型 PHP 开关,该开关响应通过 AJAX 注入到索引页面的 HTML/PHP 页面部分。

例如,当响应具有我想通过 AJAX 获得的表单时,我的问题就出现了。

如果我将我的脚本用于在我的 JavaScript 文件中检索此表单,它不起作用......但是当我将我的脚本放在与 html 响应相同的页面中时,我认为这不是一个正确的方法编码...我错了吗?

有没有办法将所有的 JavaScript 代码收集到一个文件中?

【问题讨论】:

    标签: javascript ajax model-view-controller


    【解决方案1】:

    您的 JS 文件中有 PHP 代码吗?如果是这样,那就是问题所在,JS文件没有被PHP解析。

    【讨论】:

      【解决方案2】:

      据我了解,您希望为您的表单分配一个事件处理程序。例如,您可能希望分配一个事件处理程序来处理表单的提交事件。

      $("#myform").submit(function() {
         $.post("sendFromDataHere.php", $(this).serialize());
      });
      

      现在,您有两种情况。

      1. 您将此脚本放在主 js 文件中。
      2. 您将此脚本与返回的 html 放在一起。

      2 个有效,1 个无效。这是因为在场景 1 中,执行脚本时 DOM 中不存在 #myForm。 2 有效,因为它是在 #myForm 插入 DOM 时加载的,因此可以分配事件处理程序。

      那该怎么办? 2 肯定是不好的做法。要将处理程序分配给将来某个时候插入 DOM 的元素,您可以使用 jQuery 的函数 .live().delegate。如果您使用最新版本的 jQuery (>= v1.7),您应该查看最近添加的 .on()。据我了解,现在应该使用它来代替 .bind()、.live() 和 .delegate()。

      这是使用 .do() 时脚本的样子。

      $("body").on("submit", "#myForm", function() {
         $.post("sendFromDataHere.php", $(this).serialize());
      });
      

      一个好的做法是将“body”选择器替换为您要插入 html 的容器的选择器。

      以下内容来自.on() 文档。

      “委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择一个保证在附加委托事件处理程序时存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。此元素可以是模型-视图-控制器设计中视图的容器元素..."

      使用这种将事件处理程序分配给表单的方式,您应该能够将脚本放入主 js 文件中。

      【讨论】:

      • 非常感谢您非常完整的回答!我会试试的
      • 实际上它可以正常工作: $("#content").on("submit", "#amyform", function() {// code} 但是当我这样做时:$( "#myDiv").on("click", function(){//code} 和以前一样的问题...当脚本放入返回的 HTML 但不在我的 js 文件中时,它可以工作...做您知道为什么它适用于提交而不适用于点击事件...
      • 酷!如果“内容”容器始终存在于 DOM 中,则 $("#content").on() 应该可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 2011-05-09
      • 2016-12-05
      • 2011-06-23
      • 1970-01-01
      相关资源
      最近更新 更多