1. 程式人生 > >JSON在前端和後端傳遞

JSON在前端和後端傳遞

前後臺最最傳統的互動方式就是表單互動,然後用request.setAttribute方法設定結果,渲染jsp,然而隨著前臺介面的複雜程度的提高,或者是使用了某些前端框架(sigmagrid)越來越多的介面會使用非同步方式提交資料。那麼這個過程大致是什麼樣的?

後端:我們假定使用的是java語言

前端:毫無疑問是js

java語言是一種強型別的語言,必須定義型別,然後生成例項,而js卻不是,雖然它也是面向物件的,但是它並沒有先定義類這一種概念(但是js也有型別),它是基於原型的一種模式,和java完全不同。很顯然,二者的原理,機制,語法並不能相容。二者產生的物件並不能被對方解讀。再來看網路傳輸,通常就是http/tcp協議嘍,使用的其實是請求-響應,再說白了即使字串,不論後臺傳來的是什麼型別的資料,也不論前臺傳回的什麼型別的資料,網路層統統當作字串處理,它也沒有辦法來解析型別啊!說到這裡,前後臺傳資料也就只能用字串了,那也就意味著它們各自都要完成一個轉換過程,把要傳送的轉換成字串,把要收到的字串解析成自己的物件。因為傳輸的字串會涉及前後臺雙方的解析和處理,所以雙方都必須認識或者知道字串該怎麼轉,也就是說,最好能有一種通用的規則來編輯,轉換字串,這個標準或者協議就是JSON,JSON就是用來交換資料的,是一種string,一種獨立於平臺的資料格式。

這樣一來,前臺就需要把自己的資料型別轉成JSON,然後發給後臺,後臺在用JSON來解析資料,轉換成自己的型別。後臺傳前臺一樣。那麼,怎麼把自己的資料轉成JSON呢?

1,如果知道JSON什麼格式,完全可以自己拼寫string,但是這樣不能避免完全正確,而且可能會有安全隱患,那麼就用第三方提供的庫。

2,在js中,可以使用JSON.stringify()函式,把一個js中的物件轉成json的string,也可以使用JSON.parse()函式,把一個json的string轉成一個js裡的物件。

3,在java中,有JSONObject和JSONArray兩個物件,轉string就用它們的toString()函式,轉物件,就用toBean()和toArray()函式。需要注意的是JSONObject必須是string的鍵。

最後來看一下非同步函式,常用的就是$.post()。往後臺傳引數的時候,用的是一個鍵值對,也就是該函式的第二個引數,裡面的值按照之前的說法,必須是string,那麼我這裡js定義了一個物件obj,要把它傳到後臺,必須先用stringify函式處理才行。


當從後臺取資料時,最後一個引數type很重要,我們知道最開始的時候,js接到的引數一定是一個string(通過網路傳來的),$.post的最後一個引數就是決定js接下來怎麼處理收到的引數,是當作一個string呢還是一個物件呢,取決於type的值,如果是物件,那麼就設定為“json”,它會按照json格式來轉換物件,不填的話預設是string,把它當作字串來處理。設定text也當做字串處理。