利用 jqGrid 新增中文欄位資料時,到伺服器端時,就變成亂碼了。
請 FireBug 大神幫忙,發現 request header content-type 的編碼是 utf-8,查過jqGrid的 source code,裡面也只是調用 jQuery 的 ajax 函數而已。
照理來說,應該可以用 $.ajaxSetup() 來修正,但試了好一陣子,發現沒辦法,即使我在 contentType 裡指定了 charset=big5,最後送出時,仍然會是 utf-8…
好吧,山不轉路轉,再拜請Google大神,發現有人利用 escape() 解,也就是先用 javascript escape() 編碼,server 端再解碼,這樣就解了。
大致的代碼是這樣:
// $("#jqGrid2").jqGrid( // ... 略 ... ).navGrid( "#pager2", { // ... 略 ... add:true, addfunc: function() { $("#jqGrid2").editGridRow( "new", { url: "server.asp", beforeSubmit: function( postdata, o ) { var s = postdata[ "your_field_name" ]; var ret=[true, "", ""]; postdata[ "your_field_name" ] = escape( s ); return ret; } } ); return false; } } );