[英]Submit arrays to php using dojo
如何将数组从dojo提交到php。 我正在提交这些值:
["a", "b", "c"]
这是到目前为止我得到的:
btn_send.onclick(function(){
var name_array = name_looper();
console.log(name_array);
dojo.xhrPost({
url: "dojo_phpform.php",
content: {names: name_array},
load: function(result) {
var x = dojo.byId('results');
x.innerHTML = result;
}
});
});
function name_looper(){
var names = dojo.query('input[type=text]');
var name_array = [];
names.forEach(function(element, index, array){
name_array[index] = dojo.attr(element, 'value');
});
return name_array;
}
我试图从php文件(dojo_phpform.php)中回显$ _POST ['names'],但它没有返回任何错误。 似乎该数组实际上未提交。 返回的唯一内容是数组中的最后一项。 我该怎么办?请帮忙,谢谢!
我刚刚用grails和php进行了测试。 在grails中,我没有问题可以通过dojo xhrPost提交数组:我检索了按预期正确解析了其所有值的数组。
如果我发布:
dojo.xhrPost({
content : {
names : ['foo', 'bar']
},
url : "mygrailscontroller"
});
我在另一侧得到数组参数。 证明问题不是在dojo方面解决,而是在php方面解决。
在php中,如果表单输入的变量类型为array,则必须使用方括号设置其name参数,例如:“ names []”而不是“ names”。
所以...在您的情况下,解决方案不是将数组展平为字符串(抱歉),而是使用方括号命名数组参数。 因此它将是:
dojo.xhrPost({
content : {
"names[]" : ['foo', 'bar']
},
url : "myphpcontroller"
});
据我所知,dojo的xhr函数不支持它。 我正在使用一个辅助函数自己“展平”参数。
_flattenXhrParams: function(params)
{
var newParams = {};
for(var key in params)
{
if(dojo.isObject(params[key]))
{
for(var innerKey in params[key])
{
newParams[key + "[" + innerKey + "]"] =
params[key][innerKey];
}
}
else if(dojo.isArray(params[key]))
{
for(var i = 0, l = params[key].length; i < l; i++)
{
newParams[key + "[]"] = params[key][i];
}
}
else
{
newParams[key] = params[key];
}
}
return newParams;
}
我知道这很丑陋,而且显然仅适用于一维数组/对象。 就您而言,您可以:
dojo.xhrPost({
url: "dojo_phpform.php",
content: _flattenXhrParams({names: name_array}),
load: function(result) {
var x = dojo.byId('results');
x.innerHTML = result;
}
});
..,您将获得POST参数,例如names[]=a&names[]=b&names[]=c
。 对于对象,您将获得names[somekey]=a&names[otherKey]=b
等。PHP可以很好地处理这两种情况。
我很确定content对象的值仅包含字符串。 如果要提交数组,则必须将其转换为JSON,然后在服务器上进行json_decode 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.