Php JQuery-在.serialize()中删除%5B%5D
我正在使用AJAX提交一个序列化表单。传递到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
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:很高兴这有帮助!