【问题标题】:Ajax serialize form - PHP can't get individual input dataAjax 序列化表单 - PHP 无法获取单个输入数据
【发布时间】:2020-08-08 16:23:53
【问题描述】:

我有一个用于备份文件的 JQuery UI 对话框。它包含一个输入框,因此用户可以添加一个简短的描述,该描述将成为备份文件名称的一部分。因此,如果用户输入“blue”,则备份文件名为:file_blue_2020-08-08-11:10:23

表单名称为:bckup

在我的 Ajax 代码中,我使用 var frm = $('form[name="bckup"]').serialize(); 作为表单。

输入字段的名称是:dscrb

正如您在我的 PHP 代码中看到的那样,我正在尝试获取 dscrb 的值,但它不起作用。结果文件名为:file_2020-08-08-11:10:23。但是,如果我将 PHP 代码更改为使用 $_POST["frm"] 而不是 $_POST["dscrb"],则生成的文件名为: file_dscrb=blue_2020-08-08-11:10:23

所以这告诉我们数据正在发布到 PHP 页面。

那么为什么 $_POST["dscrb"] 不起作用?

HTML:

<div id="dialog-backup" style="display: none;" title="Blah?">
    <p><span class="ui-icon ui-icon-alert" style="float: left; margin: 0px 12px 22px 0px;"></span>Blaha.</p>
    <form name="bckup">
    <p style="margin-left: 28px;"><label for="dscrb">Description: </label><input id="dscrb" type="text" style="z-index:10000" name="dscrb"> (optional)</p>
    </form>
    <p style="margin-left: 28px;">Blah?</p>
</div>

JS:

$("#backup").click(function() {
    $( "#dialog-backup" ).dialog({
            stack: true,
            resizable: false,
            height: "auto",
            width: 400,
            modal: true,
            buttons: {                  
            "Save": function() {
                //$( this ).dialog( "close" );
                $("#saveConf").trigger("click");
            },
            "Create a backup": function() {
                    $( this ).dialog( "close" );    
                var frm = $('form[name="bckup"]').serialize();
                $.ajax({
                        url : "ajax_functions.php",
                        type: "post",
                        data: { action: "backup", frm: frm },
                        //dataType: "text",
                        dataType: 'json',
                        success : function (response) {
                            var response = response[0]
                                if (response && response.toLowerCase().indexOf("success") >= 0) {
                                    $("#dialg-success-msg").text(response);
                                $("#dialg-success").dialog("open");
                            } else {
                                $("#dialg-failed-msg").text(response);
                                $("#dialg-failed").dialog("open");
                            }                               
                    },
                    error : function(response) {
                                    $("#dialg-failed-msg").text(response);
                            $("#dialg-failed").dialog("open");
                                }
                });
                //return false;
                //////////////////
            },
            Cancel: function() {
                    $( this ).dialog( "close" );
                }
        }
    });
});

PHP:

$dscrpn = isset($_POST["dscrb"]) ? trim(stripslashes($_POST["dscrb"]))."_" : '';    
$backup_file = "backups/File_".$dscrpn.date('Y-m-d-H:i:s');

【问题讨论】:

  • 您正在将表单值(以使用序列化的查询字符串的形式)分配给 javascript 变量“frm”。这就是为什么它包含“dscrb=blue”。只需分配 ajax 请求的数据参数,例如: data: $(''form[name="bckup"]'').serialize() +"&action=backup"
  • 谢谢!这解决了问题。

标签: javascript php jquery-ui


【解决方案1】:

由于您以frm: frm 发送您的帖子数据,因此您必须在PHP 中使用$_POST['frm']

你会得到一个类似dcsbr=...的字符串。要将其转换为数组,请使用 parse_str

$form = [];
parse_str($_POST['frm'], $form);

var_dump($form);

工作example

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2019-09-02
    • 2018-04-14
    • 2021-06-01
    • 1970-01-01
    相关资源
    最近更新 更多