我已经看到很多PHP代码处理表单输入,其中输入字段名称包含方括号.据我所知,当PHP脚本检查$ _POST变量时,这会以某种方式导致PHP数组.
示例HTML:
<form action='http://zzz.com' method='post'>
<input name='fruit[1]' value='apple' />
<input name='fruit[2]' value='banana' />
</form>
Run Code Online (Sandbox Code Playgroud)
示例网址:
http://zzz.com?fruit[1]=apple&fruit[2]=banana
Run Code Online (Sandbox Code Playgroud)
示例PHP:
assert($_POST['fruit'] === array(1=>'apple', 2=>'banana'));
Run Code Online (Sandbox Code Playgroud)
我对此有疑问:
它背后的机制是什么?这些包含括号的名称在什么时候被转换为数组?这是HTTP协议的一个特性吗?网络服务器?PHP语言?
继续上一个问题,这是一个常用的黑客还是普通的编程工具?
在输入字段名称中使用括号的规则是什么(全部)?
可以用这种方式创建多维数组吗?
我正在尝试通过ajax调用将数组发送到flask。但是它不起作用。
Java脚本
<script type="text/javascript">
function fillChart()
{
var nids = document.getElementById("nodes-select").value;
var cfilter = document.getElementById("filter-select").value;
var chkd = document.getElementById("further-select");
var cids = [];
for (var i=0;i<chkd.length;i++)
{
if(chkd[i].selected)
{
cids.push(chkd[i].value);
}
}
alert(cids);
$.post("/pie",{"node_id":nids,"col_select":cfilter,"col_filter":cids},function(data,status)
{
var tmp = data;
console.log(data.otstr);
});
}
</script>
Run Code Online (Sandbox Code Playgroud)
服务器代码
@app.route('/pie',methods=['POST'])
def pie():
tmp1 = request.form.get('node_id')
tmp2 = request.form.get('col_select')
tmp3 = request.form.get('col_filter[]')
return jsonify(otstr=[tmp1,tmp2,tmp3])
Run Code Online (Sandbox Code Playgroud)
这里tmp1和tmp2只是字符串,而tmp3是字符串数组.console.log(data.otstr)打印正确的tmp1,tmp2值,但是当涉及到tmp3时,因为它是一个数组,所以它仅打印第一个元素。