2014-01-24 68 views
1

我对MVC很新颖,但是我的研究指出,我可以使用默认方式通过表单向我的控制器发送请求,也可以使用jQuery和Ajax请求。Ajax请求vs普通mvc

常用的做法是始终使用Ajax,这样我就可以避免页面重新加载,而当我不想再加载时,并允许加载图标?

发送数据到控制器的两种方式应该混合吗?我想,使用表单比较容易,因为您需要在Ajax中手动模拟所有模型属性,但是看起来您似乎具有更大的灵活性。

我想知道这种模式(主要使用Ajax请求)是一个好主意。

回答

2

我认为主要是它的偏好问题,但我认为使用AJAX与jQuery提供了一个更灵活和响应的应用程序。也不一定要做更多的工作。要提交所有你在表单只好你只需要像做控制器模型的属性:

$.ajax({ 
    url: "SomeController/SomeMethod", 
    data: $('#FormName').serialize(), //this will basically do what MVC would have done if you used forms and a submit button 
}); 

而且控制器模型绑定将绑定所有属性备份到模型上。

所以你会:

public ActionResult SomeMethod(SomeModel someModel) 
{ 
    // do work with your tightly bound model! 
    return View(); 
} 

但是......如果你只是想知道AJAX的优点和一些你也会遇到那么这里的利弊你是:

PRO:

在很多情况下,网站上的相关页面由很多内容组成,它们之间通用。使用传统方法,该内容将不得不在每个请求上重新加载。但是,使用Ajax,Web应用程序只能请求需要更新的内容,从而大幅度降低带宽使用量和加载时间。

使用异步请求允许客户端的Web浏览器的用户界面更加互动和快速输入做出响应,以及页面的部分,也可以单独重新加载。即使应用程序在服务器端没有改变,用户也可能认为应用程序更快或更快。

使用Ajax可以减少与服务器的连接,因为脚本和样式表只需要被请求一次。

状态可以在整个网站上维护。 JavaScript变量将持续存在,因为主容器页面不需要重新加载。

CON:

由于其动态性质,阿贾克斯接口通常是很难比静态页面的时候发展起来的。

使用连续的Ajax请求动态创建的页面不会自动向浏览器的历史记录引擎注册,因此单击浏览器的“返回”按钮可能不会将用户返回到启用Ajax的页面的早期状态,而是可能返回他们到最后访问完整页面之前。解决方法包括使用不可见的IFrame来触发浏览器历史记录中的更改,并在Ajax运行时更改URL(在#后面)的锚点部分并监视其变化。

动态网页更新也很难让用户书签应用的特定状态。存在这个问题的解决方案,其中许多解决方案使用URL片段标识符('#'之后的URL部分)跟踪并允许用户返回给定状态的应用程序。

由于大多数网络爬虫不要执行JavaScript代码,公开的可转位Web应用程序应该提供访问时通常会使用Ajax检索到的内容的替代手段,允许搜索引擎索引它。

的浏览器不支持JavaScript或XMLHttpRequest的,或者干脆禁用了此功能,将无法正常使用依赖于Ajax的页面的所有用户。同样,诸如手机,PDA和屏幕阅读器等设备可能不支持所需的技术。能够使用Ajax的屏幕阅读器可能仍然无法正确读取动态生成的内容。让用户执行功能的唯一方法是回退到非JavaScript方法。这可以通过确保链接和表单可以正确解决并且不单单依赖Ajax来实现。在JavaScript中,表单提交可以通过“return false”来停止。

相同的源策略阻止跨域使用某些Ajax技术,虽然W3C具有可启用此功能的XMLHttpRequest对象草案。

与其他Web技术一样,Ajax也有自己的一套漏洞,开发人员必须解决这些漏洞。熟悉其他Web技术的开发人员可能需要学习新的测试和编码方法来编写安全的Ajax应用程序。

Ajax支持的接口可能会显着增加Web服务器及其后端(数据库或其他)的用户生成请求的数量。这可能导致更长的响应时间和/或额外的硬件需求。

what are the advantages and disadvantages of making ajax calls using jquery?

1

这是一种单页面应用程序(SPA)。我会建议使用像AngularJS(MVW模式),Backbone(MVC模式),KnockoutJS(MVVM模式)的JavaScript数据框架。

您没有(不应该)在JavaScript数据层中复制模型。 你会失去的东西是MVC.net视图模板思想。

你可以混合使用,但你会得到双方的缺点。

这里的微软官方SPA演示与KnockoutJS内置:

​​

我工作的一个SPA在所有的AJAX(除认证)的那一刻,IMO它给出了一个新的伟大的层面UX 。

0

这是很常见的做法,我认为微软为什么推出的WebAPI的原因之一,所以你真的不使用自己的MVC框架,而所有依赖于你的Ajax调用,或其它JS框架,像灰烬/角度js。

它需要更多时间来设置/编码ajax方式,但它对用户所看到的执行速度更快。