Php JQuery-在.serialize()中删除%5B%5D

Php JQuery-在.serialize()中删除%5B%5D,php,jquery,ajax,forms,Php,Jquery,Ajax,Forms,我正在使用AJAX提交一个序列化表单。传递到action.php的数据最终包含%5B%5D而不是[]。是否有办法取回[],或者数据是否能够在action.php中以相同的方式处理(例如,像数组一样) 该表单通过以下方式序列化: var form_data = $("#form").serialize(); 然后我通过$发送它。ajax: $.ajax({ type: "POST", url: "action.php", data: { form_data

我正在使用AJAX提交一个序列化表单。传递到
action.php
的数据最终包含%5B%5D而不是[]。是否有办法取回[],或者数据是否能够在
action.php
中以相同的方式处理(例如,像数组一样)

该表单通过以下方式序列化:

var form_data = $("#form").serialize();
然后我通过
$发送它。ajax

$.ajax({
    type: "POST",
    url: "action.php",
    data: {
        form_data: form_data,
        FrmSubmit: 'SubmitButton'
    },
    cache: true,
    success: function (html) {

        $("#show").html(html);
        alert("form success");
    }
});
传递给
action.php
的理想数据应该是这样的:
name=JohnSmith&color[]=blue&color[]=yellow&dime[]=chicken&dime[]=fish

我得到的是:
name=JohnSmith&color%5B%5D=蓝色&color%5B%5D=黄色&mdash%5B%5D=鸡肉&mdash%5B%5D=鱼

附加问题:
我也尝试了.param(),但无法真正了解接收到的数据。每个字母最后都被编码在一把钥匙里。有人能解释一下为什么会这样吗?

因此,您所做的是有效地双重序列化数据

一旦来到这里:

var form_data = $("#form").serialize();
然后在这里:

$.ajax({
    type: "POST",
    url: "action.php",
    data: {
        form_data: form_data,
        FrmSubmit: 'SubmitButton'
    },
    cache: true,
    success: function (html) {

        $("#rsvp_sub").html(html);
        alert("form success");
    }
});
当您为
数据
参数将对象传递到
$.ajax
中时,它会对其进行序列化和编码

所以…不要那样做。一种选择是这样做:

var form_data = $("#form").serialize() + "&FrmSubmit=SubmitButton";
$.ajax({
    type: "POST",
    url: "action.php",
    data: form_data,
    cache: true,
    success: function (html) {

        $("#rsvp_sub").html(html);
        alert("form success");
    }
});
请注意,如果
FrmSubmit
SubmitButton
包含除A-Z、A-Z、0-9以外的任何内容(我是保守的),或者如果您无法控制它们包含的内容,则您可能希望使用
encodeURIComponent

var form_data = $("#form").serialize() + "&" +
    encodeURIComponent('FrmSubmit') + "=" +
    encodeURIComponent('SubmitButton');

这是因为
[
]
是由RFC严格解释的。不要因为你的图书馆做了正确的事情而怨恨它。谢谢你。这一切都很顺利!我没意识到我在双重序列化数据@用户866339:很高兴这有帮助!