我正在尝试将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中并序列化它们并将它们插入到数据库中的一个字段中。这样我就可以撤回设置并反序列化以重新填充这些字段。我有什么想法可以做到这一点吗?
答案 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函数会自动将您的对象转换为字符串。