JavaScript / JQuery数组/对象问题

时间:2009-10-07 14:14:45

标签: javascript jquery

$.fn.fieldValues = function(successful)
{
    var values = {};
    this.each(function()
    {
        if(strstr(this.name, '[]', true))
        {
            var tmp = this.name.replace(/\[\]/, '');
            if(typeof values[tmp] == 'undefined') values[tmp] = {};
            var x = 0;
            while(typeof values[tmp][x] != 'undefined') x++;
            values[tmp][x] = $(this).val();
        }
        else values[this.name] = $(this).val();
    });
    return values;
}

问题是我在php端得到这个数组:

array(['tagCloud'] => '[object Object]', ['status'] => 'Active'.....)

为什么tagCloud是一个对象,如何将整个关联数组发布到php?

3 个答案:

答案 0 :(得分:1)

将它编码为json对象,然后在php(json_decode)解码它吗?

答案 1 :(得分:1)

听起来你需要 SerializeArray ,它的工作方式类似于 Serialize ,但会创建一个名称/值对象数组。

然后你应该把它变成一个JSON字符串并传递给你的php进程。然后,php可以将其反序列化为一个名称/值对象数组,您可以随意使用这些数据。

//build json object
var dataArray = $.makeArray($("form").serializeArray());

然后作为帖子传递:

// make ajax call to perform rounding
$.ajax({
    url: "/Rounding.aspx/Round/12",
    type: 'POST',
    dataType: 'html',
    data: $.toJSON(dataArray),  <-- call to jQuery plug in
    contentType: 'application/json; charset=utf-8',
    success: doSubmitSuccess
});

这是我用来序列化数据的JSON库的link

答案 2 :(得分:0)

看起来就像你正在重新发明jQuery.fn.serialize一样。 jQuery已在名称中处理"[]"的输入:

<form>
    <input type="hidden" name="foo[]" value="1" />
    <input type="hidden" name="foo[]" value="2" />
    <input type="hidden" name="foo[]" value="3" />
</form>

<script>
alert(unescape($('form').serialize())) // "foo[]=1&foo[]=2&foo[]=3"
</script>

php会将其解析为数组OOTB。