【问题标题】:Kohana - where do you put AJAX scripts?Kohana - 你把 AJAX 脚本放在哪里?
【发布时间】: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。最佳做法是什么?

【问题讨论】:

    标签: php ajax model-view-controller design-patterns


    【解决方案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。

                  【讨论】:

                    猜你喜欢
                    • 2010-11-14
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-10-14
                    • 2011-03-18
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-11-25
                    相关资源
                    最近更新 更多