******* 使用名值對送出 checkbox 或 select 多值時 *******

使用一般的 form 傳送多選資料如 checkboxmultipleselect 時,
checkbox 只要將多選項全部設定為同名,select 則是加上 multiple 屬性,
然後在後端接收多選資料成為陣列,就可以使用陣列操作方式將資料一一取出;
使用 Ajax 傳送資料時,多選資料不是透過 form 傳遞,
而是要將它們設定成字串傳出,而資料通常又是以名值對的方式包裝,
因此可以使用下列方式設定字串資料:

=== 一般名值對 ===

多選資料設定成同名,例如有個「興趣」項目,全部選項的 name 都設定為 habits,
如果 value 選擇了 swimming、jogging、shopping 的話,
則包成 x-www-form-urlencoded 的名值對時,把資料寫成如下的字串:

…&habits=swimming&habits=jogging&habits=shopping…

同名的資料連續出現多次,這樣一來,後端就可以將其接收成陣列來處理。
如果後端是使用 PHP 的話,則名稱後方還要加上 [] 表示陣列(例如 habits[]),
這樣一來,PHP 在接收時才會進行連續 push() 的動作(若不加上 [] 則會產生錯誤)。

=== JSON ===

使用 JSON,可以把表單資料設定成 Javascript 物件,
再透過 json.js 的 obj.toJSONString() 將物件轉成字串後傳給後端,非常方便。
遇到多選資料時,只要將資料加入陣列,然後再將此陣列指定給物件的一個 property,
最後再透過 obj.toJSONString() 轉成字串就可以了。
例如先設定一陣列變數 var arr=new Array()
然後透過迴圈來取得同名的資料,用 arr.push(str) 一一加入資料,
再將陣列設定成物件的屬性 obj.habits=arr
最後將物件轉成字串 obj.toJSONString()
整個字串設定給一個名稱用 send 送出:
request.send(“profile=”+obj.toJSONString());

使用一般名值對傳遞多選資料時,如果後端是 PHP,則多選資料的名稱後方要加上 [] 才行,
而使用 JSON 時,後端可以使用特別方式(function 或 method)來處理 JSON 字串,
因此即使後端是 PHP,也不需要將多選資料的名稱後方加上 []。