JQuery - 在.serialize()中摆脱%5B%5D

时间:2014-06-04 21:40:04

标签: 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: 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(),但不能真正对收到的数据做出正面或反面。每封信都以密钥编码。任何人都可以阐明为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

所以你所做的就是有效地对数据进行双重序列化。

来到这里:

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包含除AZ以外的任何内容,az,0-9(我保守),或者您不控制他们的内容包含,您想要使用encodeURIComponent

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