我正在使用Kohana,但此问题适用于Rails,CI或任何其他MVC Web开发框架。坚持一个服务器端AJAX脚本的最佳位置在哪里?
我正在计划创建Ajax_Controller并使用每个脚本的方法/操作。
例如,主页 index.php/home
上的登录表单会向 index.php/ajax/login
发送XMLHttpRequest,并且编辑个人资料表单 index.php/profile/edit
会向 index.php/ajax/editprofile
发送XMLHttpRequest。什么是最佳做法?
答案 0 :(得分:9)
我倾向于将我的ajax动作放在与任何给定模型的非ajax动作相同的控制器中。
如果可以,我尝试使用相同的操作,只更改输出类型。大多数任务都应该有一个非ajax版本,所以这往往很好。非常方便减少逻辑重复。
答案 1 :(得分:7)
AJAX跨越了所有MVC边界。也就是说,它不仅仅涉及模型,视图或控制器之一。
至于自己发送脚本(Javascript文件),这可能是由Web服务器直接处理,而不是在MVC框架内处理。
答案 2 :(得分:5)
您是否为GET和POST请求制作了不同的控制器?我不。在我看来,JS请求也不应该以不同的方式处理。
我个人看到JS请求就像GET,POST或任何其他类型的请求。因此,如果我有与用户相关的基于JS的操作,我只需在用户控制器中创建它们。
答案 3 :(得分:2)
如果你的意思是AJAX(Javascript)脚本本身,它们应该进入你的public / js文件夹。但是,如果您指的是这些AJAX请求调用的操作,则应将它们视为相应控制器的任何其他操作。要完全RESTful,您应该使用不同的格式(json,xml等)作为这些操作的返回值。
答案 4 :(得分:2)
我是一个菜鸟,但根据我的理解,用php mvc实现ajax ...思考步骤可能是:
所以,
ajax router (send XMLhttprequest)
-> PHP controllers C
-> PHP module -> PHP view results M
-> PHP controllers output results V
-> ajax results handle (into page)
答案 5 :(得分:1)
我不使用Kohana,但我在我的框架中所做的是AJAX脚本是控制器。我尝试将它们视为独立控制器,但最终它们只是控制器。
答案 6 :(得分:1)
使用单独的控制器是个好主意。我要么按功能组织我的控制器,要么按返回类型组织操作。
此外,当我使用Pylons时,我可以使用@jsonify修饰一个动作,并自动将python对象转换为JSON。非常方便。
答案 7 :(得分:1)
我喜欢将所有ajax请求保存在一个控制器中,通常通过共享模型(非ajax控制器也使用)调度他们的请求
主要区别在于通过ajax控制器(html片段,json数据等)或非ajax控制器(完整页面)生成的视图
答案 8 :(得分:0)
您可以将其包装为一般的REST-api,并使用RESTful约定和URI。 例如:
而不是index.php / ajax / editprofile它可能是对index.php / api / profile / profilename的PUT请求。