2014-01-24 71 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方式,但它對用戶所看到的執行速度更快。