表單中input name屬性有無[]的區別
阿新 • • 發佈:2018-09-08
urn get() tro this 區別 tex () efault type
,也就是
1 input數組
如下一個表單:
<input type="text" name="username[]" value="Jason" />
<input type="text" name="username[]" value="Tom" />
<input type="text" name="username[]" value="Goe" />
我們在name
屬性值後面加一個中括號[]
,後臺獲取數據的時候,就能拿到一個數組:$_POST[‘username‘] = [‘Jason‘, ‘Tom‘, ‘Goe‘]
。
改用GET方式再提交,可以看到數據格式是這樣的:
username%5B%5D=Jason&username%5B%5D=Tom&username%5B%5D=Goe
其中,%5B%5D
就是中括號[]
,代表數組。
2 非input數組
另一種容易混淆的提交方式,就是name後面沒有中括號[]
:
<input type="text" name="username" value="Jason" />
<input type="text" name="username" value="Tom" />
<input type="text" name="username" value="Goe" />
這種情況提交後,後臺拿不到一個數組,而是最後那個標簽的值
$_POST[‘username‘] = ‘Goe‘
。
GET方式提交看到數據格式如下:
username=Jason&username=Tom&username=Goe
這種方式三個username
後面沒有帶[]
。
3 非input數組方式提交成數組
上面兩種提交方式中,直接點提交按鈕提交,和用jQuery$(‘form‘).serializ()
序列化提交,得到的結果都是一樣的。
加[]
後臺得到數組,不加[]
得到最後標簽的值。
如果第二種也要提交成數組,那怎麽辦呢?
辦法就是,在提交之前用jQuery處理:
$(‘form‘).on(‘submit‘,function(e) {
e.preventDefault();
var data = $("input[name=‘username‘]").map(function () {
return $(this).val();
}).get();
$.post(‘save.php‘, {username: data}, function(r){
$(‘p‘).html(r);
});
});
這種方式稍顯啰嗦。
如果不需要提交之前不需處理數據,直接用第一種方式最為方便。
表單中input name屬性有無[]的區別