如何从php文件中的FormData获取数据

Mar*_*rco 4 php jquery

我有以下表格:

<form id="f-comment" class="form" method="post" action="submit_img_comment.php">
    <textarea name="comment"></textarea>
    <input type="submit" value="Publish" data-params='{"imageid":<?php echo $imageid; ?>}'>
</form>
Run Code Online (Sandbox Code Playgroud)

和以下javascript:

$(document).on("submit", ".form", function(e) {
    e.preventDefault();

    // what form are you submitting?
    var form = $("#" + e.target.id);

    var data = new FormData(this);
    var params = $("input[type=submit]", this).data("params"); // parameters to send along with data
    data.append("params", params);

    // data is ok
    console.log(params)

    $.ajax({
        type: form.attr("method"),
        url: "include/" + form.attr("action"),
        data: data,
        dataType: "json",
        contentType: false,
        processData: false,
        cache: false
    }).done(function(data) {
        alert(data['msg']);
    }).fail(function(data) {
        alert("Error: Ajax Failed.");
    }).always(function(data) {
        // always do the following, no matter if it fails or not
    })
});
Run Code Online (Sandbox Code Playgroud)

在我的php文件(submit_img_comment.php)中我能够得到评论,就像这样

$_POST['comment'];
Run Code Online (Sandbox Code Playgroud)

但是,当我试图获得imageid时,就像这样

$_POST['imageid'];
Run Code Online (Sandbox Code Playgroud)

我收到错误:未定义的索引:imageid

注释是表单的一部分,但imageid作为参数发送并附加在FormData中.

如何在我的php文件中获取imageid?

haz*_*rpg 6

你是看这都错了,你有什么附加到您的形式不是imageid,但params.此外,您发送的是一个javascript对象,您需要先将其转换为字符串.您需要在JavaScript中执行以下操作:

var data = new FormData(this);
var params = $("input[type=submit]", this).data("params"); // parameters to send along with data
var json_params = JSON.stringify(params); // This converts your javascript object into a string that you can send to the server.
data.append("params", json_params); // We are adding the string we have converted from the javascript object.
Run Code Online (Sandbox Code Playgroud)

现在我们已经向服务器发送了一个JSON字符串,现在我们需要解码它.要解码php中的JSON,我们使用:

$params = json_decode($_POST['params']);
Run Code Online (Sandbox Code Playgroud)

该变量$params现在将是一个包含imageid属性的php对象.这意味着您的图片ID现在存储在$params->imageid变量中,例如echo $params->imageid将输出您的图片ID.

正如@baboizk正确提到的那样,你应该isset()在PHP中使用它来确保它在使用之前确实存在.例如

$params = json_decode($_POST['params']);

// Check that imageid exists.
if(isset($params->imageid) == true) {
    // Do code that needs $params->imageid;
} else {
    // Fail gracefully.
}
Run Code Online (Sandbox Code Playgroud)

  • 那我是对的,你不是先把你的javascript对象转换成字符串,然后再发送它.如果你查看我的答案,我使用了`JSON.stringify()`函数(它作为标准内置在浏览器中),它将你的javascript对象(例如`{imageid:'value'}`)转换为你的字符串可以提交到服务器.然后你需要将该字符串解码回一个php对象,否则你不能使用这些信息 - 在我提到`json_decode()`的地方也可以看到我的答案. (2认同)