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

标签 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(),但无法真正确定接收到的数据的正面或反面。每个字母最终都被编码在一个 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");
    }
});

请注意,如果 FrmSubmitSubmitButton 包含除 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/

相关文章:

javascript - AJAX 调用 PHP 脚本不输出任何结果

javascript - 如何使用 jQuery 将 jpeg 显示为 IMG 标签的源属性,由 PHP 文件返回

javascript - 根据 leaflet.js 中 map 的缩放级别使用不同的 JavaScript 文件

javascript - AngularJS 将 Ajax 请求 POST 到 Symfony Controller

PHP preg_replace 非字母数字导致数据库插入失败

php - 我怎样才能说服我的客户试图隐藏浏览器工具栏是个坏主意?

php - MySQL PHP 搜索使用一个输入来搜索多列

javascript - 验证jquery函数的问题

javascript - 如何使用 PHP 和 AJAX 从 MySQL 创建 JavaScript 变量?

javascript - 是否建议将 angularjs 用于基于大规模身份验证的应用程序?