将多维表单数据序列化为JSON对象数组以与application / json一起使用

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (64)

我正在构建一个Laravel应用程序。在后端,$controller->wantsJson()方法是TRUE请求的内容类型application/json。所以,为了满足这个要求,我的jQuery AJAX调用就是这样。

jQuery.ajax({
    type:        "POST",
    method:      "PUT",
    url:         $form.attr('action'),
    data:        $form.serialize(),
    dataType:    "json",
    contentType: "application/json; charset=utf-8"
})

这正确地触发了wantsJson()我需要的响应。问题是jQuery无法application/json正确提供POST数据。它尝试将其写为查询字符串,当它接收到该内容类型时,它不适用于PHP后端。

为了满足这一点,我需要将JavaScript对象数组字符串化到data字段中。

JSON.stringify(dataObj)

所以现在的问题是,我没有将多维表单转换为对象数组的简洁方法。如果我只是尝试转换输出$.serializeArray(),我得到这个,这是后端无法解释的。

{
    'something' : 1,
    'field[foo]' : 2,
    'field[bar][]' : "a",
    'field[bar][]' : "b",
    'field[bar][]' : "c",
}

那当然不行。我需要某种可以转换此表单的RegEx解析器...

<input name="something" value="1" />
<input name="field[foo]" value="2" />
<input name="field[bar][]" value="a" />
<input name="field[bar][]" value="b" />
<input name="field[bar][]" value="c" />

进......

{
    'something' : 1,
    'field'     : {
        'foo'   : 2,
        'bar'   : [
            'a',
            'b',
            'c',
        ]
    }
}

你会发现这样的东西已经存在,但我找不到任何令人满意的东西。

提问于
用户回答回答于

我有同样的问题,但这个包做了诀窍:jQuery Serialize Object

它很容易使用,只需在表单上调用它(加载脚本后)

$('form#contact').serializeJSON(); // to get the form as a JS object
用户回答回答于

你可以使用PHP parse_str

parse_str - 将字符串解析为变量

$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz

希望这有帮助。

扫码关注云+社区

领取腾讯云代金券