我有以下表格:
<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>
以及以下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?
答案 0 :(得分: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.
现在我们已经向服务器发送了一个JSON字符串,现在我们需要解码它。要在php中解码JSON,我们使用:
$params = json_decode($_POST['params']);
变量$params
现在将是一个包含imageid
作为属性的php对象。这意味着您的图片ID现在存储在$params->imageid
变量中,例如echo $params->imageid
会输出您的图片ID。
正如@baboizk正确提到的那样,你应该在PHP中使用isset()
来确保它在使用之前确实存在。 E.g。
$params = json_decode($_POST['params']);
// Check that imageid exists.
if(isset($params->imageid) == true) {
// Do code that needs $params->imageid;
} else {
// Fail gracefully.
}
答案 1 :(得分:2)
您可能正在尝试访问未设置的值,这会导致运行时错误。 $ _POST没有索引'imageid'的任何元素,所以你的程序在进入null测试之前会被解释器中止。
这里是 isset()用于测试变量或数组元素是否存在而不实际尝试访问它的方法。
答案 2 :(得分:1)
尝试
$_POST["params"]["imageid"]