Php 基于MVC的AJAX和jQuery

Php 基于MVC的AJAX和jQuery,php,model-view-controller,codeigniter,jquery,Php,Model View Controller,Codeigniter,Jquery,当您使用带有大量AJAX位的jQuery的MVC模型时,如何组织控制器、方法和视图? 问题1 您是否有一个单独的控制器用于AJAX调用,还是将AJAX方法与常用的非AJAX方法混合在一个控制器中 问题2 如果要在单个控制器中混合使用AJAX和非AJAX方法,您是否有单独的AJAX和非AJAX方法,或者是否将它们组合在一起(如果可能),并传入一个值(NULL或AJAX),该值确定是将普通视图还是AJAX视图传递回浏览器 问题3 如果您有50个不同的AJAX调用,并且每个调用都需要一个方法,而这个方

当您使用带有大量AJAX位的jQuery的MVC模型时,如何组织控制器、方法和视图?


问题1

您是否有一个单独的控制器用于AJAX调用,还是将AJAX方法与常用的非AJAX方法混合在一个控制器中

问题2

如果要在单个控制器中混合使用AJAX和非AJAX方法,您是否有单独的AJAX和非AJAX方法,或者是否将它们组合在一起(如果可能),并传入一个值(NULL或AJAX),该值确定是将普通视图还是AJAX视图传递回浏览器

问题3

如果您有50个不同的AJAX调用,并且每个调用都需要一个方法,而这个方法又需要一个视图,那么我们最终将得到一个具有50个方法和50个视图的控制器。这是一个好的MVC实践吗?我可以想到控制器中的所有AJAX方法共享一个视图,其中视图文件包含case条件语句,并且视图文件被传递一个参数,该参数决定将使用50个案例中的哪一个。有点像将50个视图压缩为1

问题4

与拥有这么多视图(50个视图)不同,您如何看待在控制器方法中而不是在视图中回显输出?这样我们就不会有这么多的意见


顺便说一句,我正在为我的MVC模型使用CodeIgniter PHP框架。如果您使用的是servlet,那么您应该使用新的Servlet3.0支持来实现异步支持

问题2-由于我们使用单独的控制器,因此不适用

问题3-您是否看到这样一种场景:您有50个独特的呼叫,但没有重叠的功能? 虽然您有50个AJAX调用,但是在服务器端可以进行大量的重用来服务这些请求。所以50个调用并不等于50个方法。您可以使用命令包装每个请求,并适当地执行,而不是使用if-else,因为if-else可能会失控


问题4-50个电话可能不等于50个意见。你也需要在这里重复使用。您需要分离视图组件并组装它们。归根结底是设计。

当您进行jQuery AJAX调用时,jQuery会添加一个X-request-With-HTTP头,您可以使用它来确定给定的请求是否是AJAX请求。考虑到这一点,在AJAX和传统请求之间共享相同的控制器操作通常是有意义的,建立一个模型,然后用该模型为传统请求呈现一个视图,或者用AJAX请求的相同模型的JSON序列化表示来响应。

问题1

我将ajax和非ajax代码混合到同一个控制器中。这样,您的代码就位于一个很容易找到的公共位置

问题2

我将ajax和非ajax方法结合在一起。使其更易于使用,以便没有javascript的用户仍然可以发布到同一个控制器

问题3

您不应该有一个带有50个方法的控制器。每个功能都应该有一个控制器。因此,一个用户控制器,一个Foo控制器,一个Bar控制器-因此,您可能会得到10个控制器,每个控制器有5个方法。这样,方法属于特定于其函数的类。我有不同的观点,没有一个大的观点。您不应该使用视图内部的逻辑来确定显示的内容,这是控制器的工作。但是一些控制器/方法可以返回与其他方法相同的视图

问题4


或控制器不应输出HTML。为此使用视图,这是MVC将代码(控制器)从视图(渲染)中分离出来的全部功能。有时,我的视图只返回JSON或XML,然后使用Javascript模板更新DOM。其他时候,我的视图返回HTML。例如,表单上的保存函数。如果成功,可能只返回布尔值。然后,我的Javascript会根据响应隐藏或显示一个DIV。

顺便说一句,我使用的是MVC.NET,所以PHPMy的YMMV有admincontroller,这个有70个方法。我的整个管理员使用的一个控制器太差了。我在哪里可以找到好的MVC架构。