我有一个我正在构建的自滚动MVC框架,到目前为止,我已经设法避免了任何AJAX调用的需要。但是,现在我想创建一个实时更新提要。
我的问题是,ajax调用的处理程序通常存储在MVC中的哪里?我是否应该将它们存储在调用所涉及的同一控制器中?
例如,如果我的域www.example.com/browse/blogs (浏览是控制器,博客是方法)正在进行AJAX调用,以获取更新的博客列表,该调用是简单地调用www.example.com/browse/update_list还是其他什么?
或者,它是一个单独的AJAX控制器吗?www.example.com/ajax/update_blogs
你是怎么做到的?
发布于 2010-01-07 07:00:21
我要说的是,Ajax请求与非Ajax请求完全相同:实际上,从HTTP协议的角度来看,它的工作方式完全相同。
惟一的区别是返回一些非格式化数据,如JSON或XML (嘿,这与生成ATOM提要相同^^ ),或者只返回HTML页面的一部分。
因此,我会将它们视为任何其他“普通”HTTP请求,并以处理非Ajax请求的方式放置它们。
一种半替代的想法可能是在你的控制器中只有一个动作:/browse/blogs
--并且总是调用它。
但是,它将检测它是否通过Ajax请求,并将:
如果通过“普通”请求
调用,则只返回部分数据(或页面的一部分)。
注意:这不是一个“狂野”的想法;例如,Zend Framework提供了一些东西来促进这一点(参见12.8.4.3. ContextSwitch and AjaxContext )
发布于 2010-01-07 07:08:26
最佳实践是完全忽略它是一个AJAX请求这一事实,只关心AJAX请求与哪个控制器相关。如果您有一个通用的AJAX控制器,那么可以这么说,您很可能是将苹果和梨分组在一起。
主要区别在于,对于AJAX请求,您可能需要避免设置任何布局(而不是视图)数据。这可以通过在父Controller类中有一个方法来检查有效的AJAX请求来轻松解决:
protected function isAjax()
{
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
}
发布于 2010-01-07 06:59:02
即使您没有使用AJAX MVC,我也建议您浏览一下asp.net晚餐教程,特别是AJAX部分。它将有助于回答您的一些设计问题。
它们在同一控制器上有单独的操作。
http://www.wrox.com/WileyCDA/Section/id-321793.html
https://stackoverflow.com/questions/2016973
复制相似问题