我试图通过ajax在数组中传递数组。如果我不传入其他数组,则效果很好。
例如:
var settings = [];
// add stuff to the array
$.ajax({
type: 'POST',
url: "api/update-settings",
data: {
userId: 1,
userSettings: settings
},
done: function(response) {
//do something with the response
},
fail: function() {
// do error stuff
}
});
发送此消息将不起作用。 API(使用PHP)获取代码并能够告诉我userId
是什么,但是userSettings
尚未定义。
注意:未定义索引:/api/update-settings.php中的userSettings 第9行
但是,如果我将settings
变量设置为其他数据类型(例如int或字符串),则索引不再是未定义的。
在PHP中,当我转储请求以查看其中的内容时,找不到userSettings
:
var_dump($_REQUEST);
Output: array(1) { ["userId"]=> string(1) "1" }
我正在使用settings['template'] = template;
在我提交ajax请求之前,我可以对其进行控制台记录并得到:
[p: "setting1", s: 1587, emp: "setting2", ems: 3245, template: "", …]
其中包含我需要的所有数据。
我尝试用JSON.stringify(settings)
来对数据进行字符串化,但是随后ajax传递了一个空数组:
array(2) { ["userId"]=> string(1) "1" ["userSettings"]=> string(2) "[]" }
我觉得这很简单,但是我无法弄清楚。是的,我已经进行了搜索-我发现了类似的内容,但似乎都没有帮助。
先谢谢您。
答案 0 :(得分:2)
考虑到将值添加到settings
变量的方式,要操作/发送的是对象,而不是数组。
您需要更改以下声明:
var settings = [];
收件人:
var settings = {};
答案 1 :(得分:0)
您是否尝试过序列化阵列?您可以找到这种方法here,here和here。
所以它最终可能像
var settings = [];
// add stuff to the array
$.ajax({
type: 'POST',
url: "api/update-settings",
data: {
userId: 1,
userSettings: JSON.stringify(settings);//here is the change
},
done: function(response) {
//do something with the response
},
fail: function() {
// do error stuff
}
});
希望这会有所帮助。