关于Ajax与自定义php MVC的理论问题

Theoretical issue about Ajax with custom php MVC

本文关键字:MVC 理论问题 php 自定义 Ajax 关于      更新时间:2023-09-26

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

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

我的问题来了,例如,响应有一个表单,我想用AJAX获得。

如果我把我的脚本检索这个表单在我的JavaScript文件它不工作…但是当我把我的脚本在同一页的html响应它的工作,我认为这不是一个正确的方式来编码…我错了吗?

是否有收集所有的JavaScript代码在只有一个文件?

你的JS文件中有PHP代码吗?如果是,那就是问题所在,JS文件不会被PHP解析。

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

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

现在,你有两种情况。

  1. 你把这个脚本放在你的主js文件中。
  2. 你把这个脚本和返回的html放在一起。

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

那么该怎么办呢?最肯定的是坏习惯。你可以使用jQuery的.live()和.delegate函数为将来插入到DOM中的元素分配处理程序。如果您使用的是最新版本的jQuery (>= v1.7),您应该看看最近添加的.on()。根据我的理解,它现在应该被用来代替。bind(), .live()和。delegate()。

下面是使用.do()的脚本。

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

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

以下引用自。on()文档

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

使用这种方式分配事件处理程序到你的表单,你应该能够把你的脚本在你的主js文件