php不回显POST数据

时间:2019-05-30 20:05:07

标签: php jquery

我有以下jQuery脚本将表单数据发布到php。我正在用一个简单的php文件测试表单数据,以回显输入post:datastring的firstname字段作为测试(我是使用php的新手,所以这就是我对其进行测试的原因)。

<script type="text/javascript">
$("#btn_submit").on("click", function (event) {
    event.preventDefault();
    form_data = $('form').serialize()
    var datastring = JSON.stringify({form_data});
    console.log("Okay, I'm starting");
    console.log(form_data);
    console.log(datastring);
    return $.ajax({
        type: "POST",
        url: "echo_test.php",
        data: {post: datastring},
        success: function (responseText) {
            console.log(responseText);
        },
        error: function (error) {
            console.log("Okay, I failed" + error);
        }
    });
});

简单的php文件:

<?php
echo 'Hello ' . htmlspecialchars($_POST["firstname"]) . '!';
?>

这是Firefox开发者控制台回显的内容:

Okay, I'm starting
email_field=mj%40abc.com&firstname=mary&lastname=jones&comments=no+comment%0D%0A
{"form_data":"email_field=mj%40abc.com&firstname=mary&lastname=jones&comments=no+comment%0D%0A"}

最后回显:

Hello !

因此,回显了Hello部分和感叹号,但没有回显名字字段。我可以看到它发布到php文件的数据字符串确实包含firstname = mary,因此该字段中有一个值。

为什么名字字段没有回显?

2 个答案:

答案 0 :(得分:1)

您没有正确发布数据,请尝试以下操作:

$("#btn_submit").on("click", function (event) {
    event.preventDefault();
    form_data = $('form').serialize()
    console.log("Okay, I'm starting");
    console.log(form_data);
    return $.ajax({
        type: "POST",
        url: "echo_test.php",
        data: form_data,
        success: function (responseText) {
            console.log(responseText);
        },
        error: function (error) {
            console.log("Okay, I failed" + error);
        }
    });
});

答案 1 :(得分:1)

自从您使用

data: {post: datastring},

datastring的值将在$_POST['post']中。它将被编码为JSON,因此您需要调用json_decode()对其进行解码。

但是您可以使用form_data = $('form').serialize()form_data因此将采用URL编码格式。您需要使用parse_str()对此进行解码。

并且{form_data}的语法是{form_data: form_data}的简写,因此您必须访问已解码JSON的form_data属性。

因此,PHP必须是:

<?php
$datastring = $_POST['post'];
$datastring_decoded = json_decode($datastring);
$form_data = datastring_decoded->form_data;
$params = parse_str($form_data);
$firstname = $params['firstname'];
echo "Hello $firstname";

如果您刚刚使用它,将会简单得多

data: form_data,
$.ajax()呼叫中

。然后参数将在$_POST['firstname']中。通过$.ajax()进行发布时,几乎不需要使用JSON,除非您要调用的API明确要求使用这种格式,而不是application/x-www-form-urlencodedmultipart/form-data格式。