繁体   English   中英

使用dojo将数组提交到php

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM