使用AJAX在数组中发送数组时出错

时间:2018-11-08 19:23:04

标签: php jquery arrays ajax

我试图通过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) "[]" } 

我觉得这很简单,但是我无法弄清楚。是的,我已经进行了搜索-我发现了类似的内容,但似乎都没有帮助。

先谢谢您。

2 个答案:

答案 0 :(得分:2)

考虑到将值添加到settings变量的方式,要操作/发送的是对象,而不是数组。

您需要更改以下声明:

var settings = [];

收件人:

var settings = {};

答案 1 :(得分:0)

您是否尝试过序列化阵列?您可以找到这种方法hereherehere

所以它最终可能像

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
    }
});

希望这会有所帮助。