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

我有以下表格:

<input type="submit" value="Publish" data-params='{"imageid":}'>

和以下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 }) }); 

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

 $_POST['comment']; 

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

 $_POST['imageid']; 

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

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

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

你看这一切都错了,你附加到表单上的内容不是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. 

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

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

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

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

 $params = json_decode($_POST['params']); // Check that imageid exists. if(isset($params->imageid) == true) { // Do code that needs $params->imageid; } else { // Fail gracefully. } 

您可能正在尝试访问未设置的值,这会导致运行时错误。 $ _POST没有索引’imageid’的任何元素,因此您的程序在进入null测试之前会被解释器中止。

这里是isset()用于测试变量或数组元素的存在而不实际尝试访问它的方法。

http://php.net/manual/en/function.isset.php

尝试

 $_POST["params"]["imageid"]