代码之家  ›  专栏  ›  技术社区  ›  GeekJock

你把AJAX脚本放在哪里?

  •  8
  • GeekJock  · 技术社区  · 16 年前

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

    我是 创建Ajax_控制器并使用每个脚本的方法/操作。

    例如,主页上的登录表单 index.php/home 将向发送XMLHttpRequest index.php/ajax/login index.php/profile/edit 将向发送XMLHttpRequest index.php/ajax/editprofile . 最佳做法是什么?

    9 回复  |  直到 12 年前
        1
  •  9
  •   Tom Wright    16 年前

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

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

        2
  •  7
  •   thomasrutter    16 年前

    AJAX跨越了MVC的所有边界。也就是说,它不仅仅涉及模型、视图或控制器中的一个。

    • 您的AJAX脚本将在您的站点上调用脚本-因此这将涉及您的
    • 然后,该控制器将使用用户提供的接口访问数据库 模型 层,就像非AJAX请求一样。
    • 返回给客户机的响应数据可以打包为JSON、XML或其他格式。从技术上讲,这是您的任务 看法

    至于发送脚本(Javascript文件)本身,这可能是由web服务器直接处理的,而不是从MVC框架中处理的。

        3
  •  5
  •   Mario    16 年前

    您是否为GET和POST请求设置了不同的控制器?我不。在我看来,JS请求也不应该以不同的方式处理。

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

        4
  •  2
  •   Pras    16 年前

        5
  •  2
  •   Dmitrii Lobanov    13 年前

    我是一个noob,但根据我的理解,要用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
  •  1
  •   Ólafur Waage    16 年前

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

        7
  •  1
  •   dave paola    16 年前

    使用单独的控制器是一个好主意。我可以按函数组织控制器,然后按返回类型组织操作。

        8
  •  1
  •   Darryl E. Clarke LukePOLO    16 年前

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

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

        9
  •  0
  •   finpingvin    15 年前

    例子:

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