MVC ajax 调用 - 在哪里处理它们?

2021-12-21 00:00:00 php ajax model-view-controller

我有一个正在构建的自卷式 MVC 框架,到目前为止已经设法避免了对任何 AJAX 调用的需要.但是,现在我想创建一个实时更新的提要.

I have a self-rolled MVC framework that I am building, and up to this point have managed to avoid the need for any AJAX calls. Now, however, I'd like to create a real-time updating feed.

我的问题是,通常在 MVC 中存储的 ajax 调用处理程序在哪里?我应该将它们存储在参与调用的同一个控制器中吗?

My question is, where are the handlers for the ajax calls usually stored in an MVC? Should I store them in the same controller that is involved in making the call?

例如,如果我的域 www.example.com/browse/blogs(browse 是控制器,blogs 是方法)正在对更新的博客列表进行 AJAX 调用,该调用是否只是对 www.example 的调用.com/browse/update_list 什么的?

For example, if my domain www.example.com/browse/blogs (browse is the controller, blogs is the method) is making an AJAX call for an updated list of blogs, would the call simply be to www.example.com/browse/update_list or something?

或者,它是一个单独的 AJAX-only 控制器吗?www.example.com/ajax/update_blogs

OR, so it be to a separate AJAX-only controller? www.example.com/ajax/update_blogs

你是怎么做到的?

推荐答案

我认为 Ajax 请求与非 Ajax 请求完全相同:实际上,从HTTP 协议.

I'd say an Ajax request is exactly the same as a non-Ajax one : it works exactly the same way, actually, from a point of view of HTTP Protocol.

唯一的区别是您返回的是一些非格式化数据,如 JSON 或 XML (嘿,这与生成 ATOM 提要 ^^ 相同),或者只是一个HTML 页面.

The only difference is that you are returning some non-formated data, as JSON or XML (hey, this is the same as generating an ATOM feed ^^ ), or only a portion of an HTML page.

因此,我会将它们视为任何其他普通"HTTP 请求,并按照非 Ajax 请求的方式放置它们.

So, I would treat those as any other "normal" HTTP request, and place them the way I would for non-Ajax requests.


一种半替代的想法可能是在您的控制器中只有一个操作:/browse/blogs -- 并始终调用该操作.


A semi-alternate idea might be to have only one action in your controlller : /browse/blogs -- and always call that one.

但是,它会检测它是否通过 Ajax 请求,并且会:

But, it would detect if it's being via an Ajax request or not, and would :

  • 如果通过正常"请求调用,则返回完整页面
  • 或者如果通过 Ajax 请求调用,则只返回一些数据(或页面的一部分)

注意:这不是一个疯狂"的想法;例如,Zend Framework 提供了一些东西来促进这一点(参见 12.8.4.3. ContextSwitch 和 AjaxContext )

Note : that's not a "wild" idea ; Zend Framework, for instance, provides some stuff to facilitate that (see 12.8.4.3. ContextSwitch and AjaxContext )

相关文章