1. 程式人生 > >說說contentType和ajax傳值轉義那些事

說說contentType和ajax傳值轉義那些事

做一個專案,測試得時候發現密碼是字元數字組成得,ajax傳值得時候沒事,但如果出現特殊字元#&之類得,就不能正常使用了,查了資料有如下發現。

1.JQ得contentType預設是application/x-www-form-urlencoded,這種方式資料格式得特點name=value中間用&連結,

例如http://localhost:5000/restful/mysqlmeta?host=a&user=a&passwd=%23aa%23a&database=ded&port=3306;

這種方式傳輸一些簡單得資料沒有問題如果傳輸一些複雜得json巢狀關係比較多得

例如{"step_id":"","filter_id":"","result_id":"","filter_name":[{"name":"序號","type":"1","value1":"<","value2":"10"},{"name":"使用者ID","type":"1","value1":"<","value2":"10"}],"reportinfoid":"86","table_id":"13","table_name":"xlsx_czq_25_2"}

你傳進去可以發現哦那個請求,但是服務端收到得資料為空了,因為ajax沒有辦法處理這個資料,這個問題浪費了很長時間,後臺一直說收不到,我這邊顯示傳過去了,大家多注意!!

後來發現我們把contentType型別變成application/json型別,這種型別是text,用JSON.stringfiy序列化以後傳送,服務端用JSON.parse,序列化回去,完美解決問題!!

2.轉義,如果用application/json這種方式傳輸,標準得json格式,不用考慮轉義問題了,直接傳送過去就可以使用,

但如果使用application/x-www-form-urlencoded又恰好要轉義了怎麼辦呢?後來發現了一個神奇得玩意encodeURIComponent(),自動把特殊字元轉移了!

 

大家去試試吧!