我有以下jQuery:
$(document).ready(function() {
$('input[type="submit"]').click(function() {
event.preventDefault();
var email = $('.email').val();
$.ajax({
type: "POST",
url: "register_email.php",
data: JSON.stringify({ "email": email }),
dataType: "json",
contentType: "application/json",
success: function(data) {
alert(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + " " + errorThrown);
}
});
});
});
email
变量已明确设置,我可以alert
出来。
然而,当我到PHP时,这是我的脚本:
<?php
$db = new mysqli("localhost", "...", "...", "...");
if ($db->connect_error) {
echo "Could not connect to database.";
exit;
}
else {
$emerd = json_decode($_POST["email"]);
$db->query("INSERT INTO emails (email) VALUES (' " . $emerd . "')");
echo $emerd;
}
?>
它始终警告“null”回到我身边。为什么它不明白我在发布什么?
答案 0 :(得分:1)
将您的电子邮件字段放在这样的表单中
<form id="myform"><input type="text" name="email"></form>
然后使用jQuery序列化它
$('#myform").on('submit', function (e) {
e.preventDefault();//this keeps the form submission from refreshing the page
var data = $(this).serialize();
$.ajax({
url: '',
data: data, //assign the data like this
type: "post",
success: function (response){
},
....other params
})
})
这是最好的方式来做这个恕我直言,我认为这是这种事情的推荐方式。无需编码为JSON,然后在服务器端解码JSON。
答案 1 :(得分:0)
您没有将json
字符串传递回JavaScript。你应该这样做:
echo json_encode(array(
"email" => $emerd
));
除此之外,您不需要:
json_decode
上使用$_POST["email"]
contentType
请求中设置JSON.stringify
选项或$.ajax
数据对象答案 2 :(得分:0)
不要将其编码为数组,也不需要“email”周围的引号。
$.ajax({
type: "POST",
url: "register_email.php",
data: { email: email, contact:$('#contact').val() }, //no problem even if you have more than one variables.
success: function(data) {
alert(data);
},
error: function(jqXHR, textStatus, errorThrown) {
alert(textStatus + " " + errorThrown);
}
});
在服务器端,
$emerd = $_POST["email"];