post数组jquery序列化

我想将一个javascript数组发布到php页面。 数组必须是关联的。 我的结构看起来像这样:

  

当我创建数组时,它是:

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

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

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

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

我建议两个改变。

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

 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"; 

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

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

可以改为

 data: myObject 

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