2014年10月29日 星期三

[iThome 第七屆鐵人賽 28] Javascript和Mvc溝通 - 概念篇

隨著前端處理的需求越來越高和前端框架的進化,前端變的更加容易,並且給更好的使用者體驗,身為開發者通常都需要使用到AJAX的技術,避免使用者需要一直切換和刷新頁面。

Mvc裡面提供了非常好框架,讓要回傳JSON變的非常方便,但是有些地方做的還是有點不夠好。

因此,這一篇將會介紹Mvc處理不好的地方和如何修正的概念內容,下一篇在介紹如何實作。

內建的json Serializer效能不好

內建Mvc所使用的json 序列化物件效能並不是太好,WebAPI意識到這個問題,因此WebAPI使用的就是比較受歡迎的JSON .Net。爲了避免效能問題,和一些等一下介紹的問題,這邊將會介紹如何提供json .net版本的JsonResult。

內建的json回傳格式不符合javascript的命名原則

在C#裡面,通常Property使用的是Pascal Case(也就是每一個字母都是大寫,例如IsLocked),但是Javascript則是用camel case(駝峰式)。這個會造成javascript在撰寫的時候會比較變扭。

因此,產生的Json應該要是camel case才對。

錯誤訊息的傳遞

假設我們有功能需要用post的方式把資料post到Mvc,Mvc可能會回傳3種結果:

  1. 成功
  2. 失敗
  3. 驗證失敗

其中,成功代表的是http status 200,因此Ajax的success方法會接到。但是另外兩個失敗就是問題所在。

首先第一個“失敗”,這個通常都是http status 400 或者 500 表示有問題,因此ajax裡面的error方法會接到。

但是第二個“驗證失敗”其實是資料面的失敗。以目前來說,通常還是會回傳http status 200,然後要自己早ajax的success方法裡面判斷,是否成功,然後在作出對應處理。

這樣的邏輯其實並不好,因為既然驗證失敗了,那麼應該由ajax的error一起處理,而不是在success,因為寫在success裡面又在判斷其實讓整個javascript看起來不是那麼好閱讀。

結語

這一篇介紹了預設的JsonResult有什麼問題,在下一篇將會介紹如何用Json .net作為序列化的library,並且如何解決上述提到的問題。

沒有留言 :

張貼留言