我已经看到很多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语言?
继续上一个问题,这是一个常用的黑客还是普通的编程工具?
在输入字段名称中使用括号的规则是什么(全部)?
可以用这种方式创建多维数组吗?
我试图让flask/jquery/ajax示例适用于我的特定情况,但我每次都会变短.我知道有几次问这个问题,但答案对我没有帮助(是的,我是新手).
该示例将字符串从javascript传递给python.我想传递一个数组.网络表明这是可能的.这是我有的:
HTML/Flask模板:
{% extends "layout.html" %}
{% block title %}Test{% endblock %}
{% block content %}
<div>
<h1>Flask Jquery Test</h1>
<div>
<input type="button" value="Transfer" id="button" />
</div>
<div>
Wordlist<br />
<select multiple="multiple" id="wordlist" size="5">
<option>Volvo</option>
<option>Audi</option>
<option>BMW</option>
<option>Mercedes</option>
<option>Toyota</option>
</select>
<span id="result"></span>
</div>
</div>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
JS脚本:
$(document).ready(function() {
$("#button").bind('click', function(){
//Get all words from list
var list = [];
$("#wordlist option").each(function(){
list.push($(this).val());
});
//var list = $( "#wordlist option" ).val();
console.log(list);
$.getJSON($SCRIPT_ROOT + '/_array2python', { …Run Code Online (Sandbox Code Playgroud) 我在flask中有一个名为array的函数,它接受一个列表并打印出列表中的项目:
def array(list):
string = ""
for x in list:
string+= x
return string
Run Code Online (Sandbox Code Playgroud)
在客户端,我想将名为str的javascript数组传入此数组.我该怎么办?这就是我现在所拥有的,但Flask并未阅读添加的变量.有任何想法吗?
for (var i = 0; i < response.data.length; i++) {
console.log(i);
// str = str + "<br/><b>Pic</b> : <img src='"+ response.data[i].picture +"'/>";
str[i] = response.data[i].picture;
}
window.location = "{{ url_for('array', str=list ) }}";
Run Code Online (Sandbox Code Playgroud)