我需要在我的数据库中存储名为'msg'的json字符串中的变量,但是我无法用$ msg = $ _POST ['msg']来捕获它。我该如何正确捕捉它?
此外,我想在网页上直接回复$ msg的内容。
<div id="addCommentContainer">
<form id="addCommentForm" action="">
<textarea name="msg" id="msg" cols="82" title="Your comment" rows="2">Your comment...</textarea>
<br />
<input type="text" name="author" title="name" value="<?php echo $_SESSION['username']; ?>" id="author" />
<br />
<div id="personal">
<input type="text" name="city" id="city" title="city (optional)" value="" />
<br />
<input type="text" name="email" id="email" title="e-mail (optional)" value="" />
<br />
<input type="text" name="url" id="url" title="website (optional)" value="" />
<input type="hidden" id="cam_id" class="hd" name="cam_id" value="<?php echo $cam_id ?>" />
</div>
<input type="submit" id="submit" value="Comment" />
</form>
</div>
//if submit button is clicked
$('#submit').click(function () {
//start the ajax
$.ajax({
//this is the php file that processes the data
url: "/comment/insert.php",
type: "POST",
data: $("#addCommentForm").serialize(),
contentType: "json",
//success
success: function (html) {
//if returned 1/true (process success)
if (html == 1) {
//show the success message
$('.done').fadeIn('slow');
//if process.php returned 0/false (send mail failed)
} else alert('Sorry, unexpected error. Please try again later.');
}
});
//cancel the submit button default behaviours
return false;
});
$msg = $_POST['msg'];
// echo $msg;
$author = $_POST['author'];
$email = $_POST['email'];
$url = $_POST['url'];
$city = $_POST['city'];
// include ("/home/sionvalais/domains/skiweather.eu/public_html/v3/functions/strip.php");
if ($cam_id>1) {
if ($author=='NAME') {
$author='Anonymous';
}
$host = gethostbyaddr($ip);
// mysql_query ("set character_set_results='utf8'");
mysql_query("INSERT INTO sv_review (author,email,msg,cam_id,url,lud)
VALUES (
N'".$author."',
'".$email."',
N'".$msg."',
'".$cam_id."',
'".$url."',
NOW()
)");
}
答案 0 :(得分:2)
据我所知,contentType
属性的默认值为"application/x-www-form-urlencoded; charset=UTF-8"
,这对大多数情况都适用。
但是,您发送到服务器的data
似乎不是JSON对象,设置contentType
不会将数据转换为JSON对象,它只是声明数据类型。
因此,如果data
只是序列化的名称/值对,请删除contentType: "application/json",
然后重试。
如果它是有效类型的JSON,请使用以下代码解析服务器上发布的JSON对象:$array = json_decode($json, true);
您可以按照以下方法获取服务器上的JSON对象:
$json = @file_get_contents('php://input');
$array = json_decode($json, true);
// See what happens
print_r($array);
答案 1 :(得分:1)
$ POST ['msg']应为$ _POST ['msg']
还输出你的POST变量,以便你可以使用它们来检查它们:
echo print_r($_POST);
答案 2 :(得分:1)
使用必须将数据字符串化为JSON:JSON.stringify($("#addCommentForm").serializeArray())
。 $("#addCommentForm").serialize()
没有制作JSON。
答案 3 :(得分:0)
尝试此更改 -
//if submit button is clicked
$('input#submit').click(function () {
//start the ajax
$.ajax({
//this is the php file that processes the data
url: "/comment/insert.php",
//GET method is used
type: "POST",
data: $("form#addCommentForm").serialize(),
dataType: "application/json",
//Do not cache the page
cache: false,
//success
success: function (html) {
//if returned 1/true (process success)
if (html == 1) {
//hide the form
$('.form').fadeOut('slow');
//show the success message
$('.done').fadeIn('slow');
//if process.php returned 0/false (send mail failed)
} else alert('Sorry, unexpected error. Please try again later.');
}
});
//cancel the submit button default behaviours
return false;
});
答案 4 :(得分:0)
.serialize形成一个可以发送到服务器的查询字符串。它不会创建一个json,做一个警报
$("#addCommentForm").serialize()
你应该看到一个查询字符串,而不是一个json,所以删除该设置
contentType: "application/json"
,
从
$.ajax
你应该能够在php {/ p>中的$_POST['msg']
中获取msg
答案 5 :(得分:0)
请勿使用:contentType: "json"
这是一个POST,严格吗?所以,它将使用:
contentType: "multipart/form-data"
或
contentType: "application/x-www-form-urlencoded"
或者只是为了简化不要使用某人。
删除任何contentType
或dataType
,jQuery默认选择一个,因为类型是POST。