AJAX和MVC模式

4

如果有类似的问题,请将我重定向。虽然我确定我的问题非常普遍,但我还没有找到任何东西...

我有一个页面,其中有5-6个div,可以通过单独的Ajax请求加载。通过原型ajax.request(),服务器(php)在客户端刷新div的innerHTML之前回显分区的HTML代码。

这是我的问题:在服务器端保留MVC模式与其抛出的HTML代码有关的最佳实践是什么?

目前,我的模型将数据库数据返回给控制器,使其能够启动一个包含HTML代码的非常长的变量,然后回显它。我的问题是,我最终会在控制器类中拥有大量的HTML代码...

5个回答

4
您可以使用 JSON 将数据传输到客户端并在那里构建。这样,您将拥有一个抽象的数据源,不受标记的限制。JSON 可以直接评估为 JavaScript 对象。

那可能是要做的事情...我会减少网络传输的数据量,这样应该会更快。非常感谢。 - Gad
一个保持MVC清晰的好方法,但它并不更快,因为最终用户必须从JSON构建HTML。 - Magnar

3

你真的喜欢使用MVC吗?C(控制器)可以通过约定/RESTful URL大部分被移除。

像Andy所说,你应该使用JSON将数据传输到客户端。XML也是一个广泛使用的替代方案(因为如果其他应用程序必须使用你的服务,它的表现要好得多)。XML可以很容易地转换为JSON!而且JSON代码是有效的JavaScript对象代码。所以你可以用它来拼接客户端模板。

你应该尝试EJS来进行浏览器/客户端模板化!如果这样做,你的控制器中就没有HTML样板!只有业务逻辑。这遵循了许多SOA最佳实践。这种架构模式称为SOFEA或SOUI(两者相同)。

我已经用它写了我的主页。对许多模板引擎的评估已经证明EJS是最佳选择。

因为: 1. 它很快! 2. 它是免费的(MIT许可证)! 3. 它与JQuery很好地配合使用 4. 它确实修改了DOM,所以其他方法可以访问使用的模板(JS Repeater不能)。

其他框架:

  1. JSmarty:虽然可以使用Smarty模板,但使用起来并不容易。它还没有经过企业验证,仍在积极开发中。

  2. Trimpath JavaScript Templates:与JQuery/Prototype不兼容,仍在开发中。

  3. jQSmarty:很好用,但看起来开发已经停止了。最后一次更改是在2008年。

  4. seethrough_js:侵入式的模板布局,对于Erlang人很好用。

  5. JsonML:也是一种侵入式的模板格式,基于JSON。你怎么看?我认为设计师应该留在他们的HTML/CSS元素上,这样就不会浪费知识。

  6. JS Repeater:让我想起了自己的糟糕尝试。我已经查看并使用了它,但它处理很多事情并不是很好(例如空字段等)。

  7. Pure:是时候开始一场关于如何开发页面的宗教战争了吗?我认为Pure不是答案。如果你定义了真正需要做的事情,它会变得臃肿,并且无法像JSF那样扩展。它没有侵入式语法,这非常好。但是对于渲染问题的难以使用的规则的代价是不能接受的。它感觉不对劲。我遇到了其他人,他们的想法完全不同!测试一下,然后让我知道你的想法。


1

如果您认为MVC中最重要的字母是V,那么与AJAX一起工作就更是如此。 AJAX与HTML和JS一起构成了表示层,理论上,这是视图(View)的位置。

视图(View)负责向最终用户发送数据,而MVC模式不仅是为了将模型(Model)、视图(View)和控制器(Controller)分离,还可以为相同数据模型提供多个视图。

因此,最好将代码封装在一个类中,并使用相同的控制器代码来呈现不同的视图。 在第一种情况下,它可能是静态页面的绘制,但在其他情况下,它是专门为AJAX调用设计的视图,并且数据可以采用JSON或其他标准格式,只要您尊重每个层所具有的职责即可。


1

0

如果HTML主要是字符串文字,如我所理解的那样,您可能应该将HTML完全移出<? ?>标记,并使用小型内联PHP片段插入来自控制器设置的变量的动态内容。

这实际上是一种模板机制。请记住,PHP本质上是模板引擎。

示例:

<?php
include 'controller.php'; // set variables used below
?>
<div>
   <h1>Hi there, <?=$UserName?></h1>
   <p>Since you've been here, <?=$numberOfDays?> days have gone by</p>
</div>

etc。这也会在你的HTML中返回语法高亮,并且不再需要在PHP代码中连接所有长字符串字面量,这通常会使代码的可读性降低。

这是我通常在我的代码中做的事情。我的问题涉及到ajax:服务器必须以某种方式ECHO数据(现在它回显div的html内容)... - Gad
嗯,我想我没有理解你的问题。 - Hanno Fietz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接