Alan Tsai 的學習筆記


學而不思則罔,思而不學則殆,不思不學則“網貸” 為現任微軟最有價值專家 (MVP)、微軟認證講師 (MCT) 、Blogger、Youtuber:記錄軟體開發的點點滴滴 著重於微軟技術、C#、ASP .NET、Azure、DevOps、Docker、AI、Chatbot、Data Science

[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,並且如何解決上述提到的問題。


如果文章對您有幫助,就請我喝杯飲料吧
街口支付QR Code
街口支付QR Code
台灣 Pay QR Code
台灣 Pay QR Code
Line Pay 一卡通 QR Code
Line Pay 一卡通 QR Code
街口支付QR Code
支付寶QR Code
街口支付QR Code
微信支付QR Code
comments powered by Disqus