【问题标题】:Error while sending array in array using AJAX使用 AJAX 在数组中发送数组时出错
【发布时间】: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!' ]; 进行验证

标签: php jquery arrays ajax


【解决方案1】:

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

您需要更改您的声明:

var settings = [];

到:

var settings = {};

【讨论】:

  • 就是这样。我知道这很简单。谢谢!
【解决方案2】:

您是否尝试过序列化数组?你可以找到这个方法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
    }
});

希望这会有所帮助。

【讨论】:

  • 我也试过了。它确实发送了更多,但只是一个空白数组。我会在我的问题中添加这个
猜你喜欢
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 2018-01-18
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
相关资源
最近更新 更多