【发布时间】:2018-11-08 19:23:04
【问题描述】:
我正在尝试通过 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 或 string),则索引不再未定义。
在 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) "[]" }
我觉得这很简单,但我想不通。是的,我已经完成了搜索 - 我发现了类似的东西,但似乎没有任何回应有帮助。
谢谢你,提前。
【问题讨论】:
-
您能否确认您实际上是通过网络选项卡发送所有数据?查看stackoverflow.com/a/21617685/2191572 并找到您的“请求标头”。您也可能遇到缓存问题,或者您正在测试完全错误的页面。
-
您确定您实际上是在“向 (
settings) 数组添加内容”吗?因为如果你不是,我很确定它不会为请求正文中的空userSettings数组发送任何内容。 -
@MonkeyZeus - 好吧,如果我将变量更改为不是数组,它会发送,所以我假设它正在发送。
-
@Jeto 是的,我确定。如果我执行 console.log,我会得到充满正确数据的完整数组。
-
@Jeto 无论如何都是正确的,jQuery 不会发送这样的空数组。您可以改为通过
var settings = [ 'yay something!' ];进行验证