我正在使用 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(),但无法真正确定接收到的数据的正面或反面。每个字母最终都被编码在一个 key 中。谁能阐明为什么会这样?
最佳答案
所以您所做的是有效地对数据进行双重序列化。
来到这里:
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");
}
});
请注意,如果 FrmSubmit
或 SubmitButton
包含除 A-Z、a-z、0-9(我比较保守)以外的任何内容,或者如果您无法控制它们包含什么,你会想要使用 encodeURIComponent
:
var form_data = $("#form").serialize() + "&" +
encodeURIComponent('FrmSubmit') + "=" +
encodeURIComponent('SubmitButton');
关于php - JQuery - 摆脱 .serialize() 中的 %5B%5D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048055/