又沒有想過數組能否被post出去?
當然是可以的。比如網頁前端中造了個數組user[],裡面存放著許多用戶的id,要POST給服務器保存,這種事常見,代碼可能是這樣的:
...
var user = new Array();
...
$.ajax({
url: "http://xxx/xxx.php",
data: user,
type: 'POST',
success: successCb,
error: errorCb,
async: false
});
...
於是乎數組user就被POST出去了。在傳送過程中它是啥樣的呢?我們抓包看看:
它就是這樣傳輸的,如果我們看一下原始的數據,它是形如這樣的:
user[]=11111&user[]=22222&...
注意:
1、數組在傳輸過程中沒有下標,也就是說下標由接收方自己計算得出;
2、數組元素之間用&符號連接,其實就是URL POST的那種“習慣形式”;
3、數組元素的值沒有用""括起來,也就是說上圖中user[] = "XXXX"的引號是抓包器分析加上去的,好讓開人員識讀。
這種數組的POST也常用語網頁中一堆相同name或者id的元素,比如一堆checkbox還都叫user,有的被選中了,有的沒有,然後一把POST出去,是可以的,但是元素的名字後面得加上个[],如下:
<input type="checkbox" name="user[]" value="" />
<input type="checkbox" name="user[]" value="" />
<input type="checkbox" name="user[]" value="" />
<input type="checkbox" name="user[]" value="" />
瀏覽器就是把它變成haha數組傳輸,另一頭也得用數組方式解析。
如果元素名不加[]呢?比如这样:
<input type="checkbox" name="user<span style="font-family: Arial, Helvetica, sans-serif;">" value="" /></span>
<input type="checkbox" name="user" value="" />
<input type="checkbox" name="user" value="" />
<input type="checkbox" name="user" value="" />
那另一頭將只能獲取最後一個checkbox的值(相當於是最後一個把前面的都覆蓋了)。
那該怎麼解析呢?
以萬人鄙視的PHP為例,可以這麼干:
$users = $_POST['user'];
if(is_array($users))
{
foreach($users as $users_member)
{
echo $users_member;
}
}
$users_member就是每個元素的值。