post数组jquery序列化

时间:2009-11-19 05:16:16

标签: jquery arrays post serialization

我正在尝试将javascript数组发布到php页面。数组必须是关联的。我的结构看起来像这样:

<input id="test" value="1" class="settings" />
<input id="test1" value="2" class="settings" />

当我创建数组时,它是:

var myArray = new Array();

$(".setttings").each(function(){
     myArray[$(this).attr("id")] = $(this).val();
});

现在当我发布我正在做的数据时:

$.ajax({
    type: "POST",
    url: 'post.php",
    data: "settings="+myArray,
});

问题是,在firebug中,如果我查看帖子的设置是空的。我需要像这样传递的数组,因为我将把每个设置都放到php中并序列化它们并将它们插入到数据库中的一个字段中。这样我就可以撤回设置并反序列化以重新填充这些字段。我有什么想法可以做到这一点吗?

2 个答案:

答案 0 :(得分:10)

我建议两个更改。

首先,既然你想在PHP中使用关联数组,你应该在Javascript中使用Object而不是数组:

var myObject = new Object();

$(".setttings").each(function(){
    myObject[$(this).attr("id")] = $(this).val();
});

接下来,您希望以稍微不同的方式将其传递给数据部分:

$.ajax({
    type: "POST",
    url: "post.php",
    data: {
        settings: $.param(myObject)
    }
});

重要的部分是$ .param,因为它将对象转换为一系列参数(适用于query_string)。

你需要在服务器上做的最后一件事就是用PHP解析它:

parse_str($_POST['settings'], $settings);

现在,您可以像在JavaScript中一样访问$settings变量中的所有内容。

$settings['id'] = "value";

答案 1 :(得分:3)

对Dougs的回答只是一个小小的更新。

data: {
        settings: $.param(myObject)
    }

可以更改为

data: myObject

jQuery ajax函数会自动将您的对象转换为字符串。