Kohana - 你把 AJAX 脚本放在哪里?

Posted

技术标签:

【中文标题】Kohana - 你把 AJAX 脚本放在哪里?【英文标题】:Kohana - where do you put AJAX scripts? 【发布时间】:2010-10-17 16:05:12 【问题描述】:

我正在使用Kohana,但这个问题适用于 Rails、CI 或任何其他 MVC Web 开发框架。粘贴服务器端 AJAX 脚本的最佳位置在哪里?

计划创建一个 Ajax_Controller 并为每个单独的脚本使用一个方法/动作。

例如,主页上的登录表单 index.php/home 将发送一个 XMLHttpRequest 到 index.php/ajax/login,而编辑配置文件表单 index.php/profile/edit 会向 index.php/ajax/editprofile 发送一个 XMLHttpRequest。最佳做法是什么?

【问题讨论】:

【参考方案1】:

我倾向于将我的 ajax 操作与任何给定模型的非 ajax 操作放在同一个控制器中。

如果可以,我会尝试使用相同的操作,并且只更改输出类型。无论如何,大多数任务都应该有一个非 ajax 版本,所以这往往工作得很好。非常方便减少逻辑重复。

【讨论】:

@Mario 似乎同意。这算作共识吗? 确实,不要改变控制器,动作是一样的。只需更改您的视图(让 AJAX 视图返回 JSON 或其他内容和“正常”视图 html 进一步了解 Pim 的评论。docs.kohanaphp.com/helpers/request#is_ajax 应该可以帮助您。【参考方案2】:

AJAX 跨越所有 MVC 边界。也就是说,它不会只进入模型、视图或控制器之一。

您的 AJAX 脚本将调用您网站上的脚本 - 因此这将涉及您为此目的创建的 控制器 层的一部分。 反过来,该控制器将使用 model 层提供的接口访问数据库,就像非 AJAX 请求一样。 返回给客户端的响应数据可能被打包为 JSON 或 XML 之类的。从技术上讲,这是您的 view 层的任务,尽管如果您的应用程序对视图层的定义只不过是“一个 HTML 模板系统”,而不是“处理和格式化任何发送回客户端的内容”无论是 HTML 还是 XML 之类的其他内容”,那么您的 XML 或 JSON 生成可能需要进入自己的新小部分。

至于发送脚本(javascript 文件)本身,这可能会由 Web 服务器直接处理,而不是在您的 MVC 框架内。

【讨论】:

【参考方案3】:

您是否为 GET 和 POST 请求制作不同的控制器?我不。在我看来,JS 请求也不应该被区别对待。

我个人认为 JS 请求就像 GET、POST 或任何其他类型的请求。因此,如果我有与用户相关的基于 JS 的操作,我只需在用户控制器中创建它们。

【讨论】:

【参考方案4】:

如果您指的是 AJAX (Javascript) 脚本本身,那么这些脚本应该放在您的 public/js 文件夹中。但是,如果您指的是由这些 AJAX 请求调用的操作,则应将它们视为相应控制器的任何其他操作。要完全 RESTful,您应该使用不同的格式(json、xml 等)作为这些操作的返回值。

【讨论】:

【参考方案5】:

我是菜鸟,但是根据我的理解,用php mvc来实现ajax...思考的步骤可能是:

将现有 php 视图层的定义/功能从“HTML 模板”更改为“结果格式(XML、JSON 等”)-> 来自相关模块的结果,然后由控制器调用以输出到 AJAX 对象,然后这意味着您需要使用格式化方法将视图层写入每个特定的类 PHP 模块层保持不变 使用 JS 构建一个 Ajax 路由器类,该类与您在 PHP 中路由的结构保持相同 用 JS 构建一个 ajax 结果处理程序类来处理从 PHP 控制器(XML JSON 等)返回的结果,然后从这里做任何你想要的用户交互,这将被上面的 Ajax 路由器类调用

所以,

ajax router (send XMLhttprequest)
-> PHP controllers  C
-> PHP module -> PHP view results M
-> PHP controllers output results V
-> ajax results handle (into page)

【讨论】:

【参考方案6】:

我不使用 Kohana,但我在我的框架中所做的是 AJAX 脚本是控制器。我尝试将它们视为独立的控制器,但最终它们只是控制器。

【讨论】:

【参考方案7】:

使用单独的控制器是个好主意。我要么按功能组织控制器,然后按返回类型组织操作。

此外,当我使用 Pylons 时,我可以使用 @jsonify 装饰一个动作,它会自动将 python 对象转换为 JSON。非常方便。

【讨论】:

【参考方案8】:

我喜欢将所有 ajax 请求保存在一个控制器中,通常通过共享模型(非 ajax 控制器也使用该模型)分派它们的请求

主要区别在于通过 ajax 控制器(html 片段、json 数据等)或非 ajax 控制器(整页)产生的视图

【讨论】:

【参考方案9】:

您可以将其包装为通用 REST-api,并使用 RESTful 约定和 URI。 示例:

它可以是对 index.php/api/profile/profilename 的 PUT 请求,而不是 index.php/ajax/editprofile。

【讨论】:

以上是关于Kohana - 你把 AJAX 脚本放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

Kohana 3.0 ORM 在哪里 - 和

将 DllImport 放在哪里?

如何使用 Kohana ORM 选择以及在哪里 - 如果 - 在?

你把你的语义信息挂在哪里,html?

PHP Kohana入门体验教程

如果使用maven,通常你把log4j.properties放在java或resources下?