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


JQuery - Getting rid of %5B%5D in .serialize()

我使用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&meal[]=chicken&meal[]=fish

我得到的是:name=JohnSmith&color%5B%5D=blue&color%5B%5D=yellow&meal%5B%5D=chicken&meal%5B%5D=fish

附加问题:我也尝试过.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作为data参数时,它会序列化并对进行编码。

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

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

请注意,如果FrmSubmitSubmitButton包含除A-Z, A-Z, 0-9以外的任何内容(我是保守的),或者如果您不控制它们包含的内容,您将希望使用encodeURIComponent:

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