我正在处理订阅表格。它需要一个用户的电子邮件,点击它应该检查电子邮件是否在数据库中,如果它返回 false,如果不是它应该添加它然后返回 true。
我希望所有这些都使用 ajax 来改善用户体验。
该函数似乎不再被调用,我对 AJAX 很陌生,所以不确定问题可能出在哪里。任何帮助表示赞赏。
HTML:
<section>
<h4>Stay Updated</h4>
<p>Sign up for our newsletter. We won't share your email address.</p>
<form name="newsletterForm" id="newsletterForm" action="" method="post">
<div class="input-append row-fluid">
<input type="email" placeholder="Email Address" class="span6" name="newsletterEmail" id="newsletterEmail"/>
<input type="submit" id="newsletterSubmit" name="newsletterSubmit" value="newsletterSubmit" onclick="newsletterSignup(); return false">
<p id="status"></p>
</div>
<!--close input-append-->
</form>
</section>
PHP:
我已经删除了测试以检查电子邮件是否存在以简化事情。
<?php require(dirname(__FILE__).'../core/init.php');
if($_POST){
$email = $_POST['newsletterEmail'];
if($newsletter->addEmail($email) == true){
$data['message'] = "Signed up";
$data['success'] = true;
}
echo json_encode($data);
}
php函数:
public function addEmail($email){
$query = $this->db->prepare("INSERT INTO `newsletter` (`email`, `signupDate`)
VALUES (?, ?)");
$mysqltime = date ("Y-m-d H:i:s", time());
$query->bindValue(1, $email);
$query->bindValue(2, $mysqltime);
try{
$query->execute();
return true;
}catch(PDOException $e){
die($e->getMessage());
}
}//end add email function
阿贾克斯:
function newsletterSignup(){
var email = $('#newsletterEmail').val();
if(email == ""){
$('input#newsletterEmail').focus();
return false;
}
var params = {email: email};
var url = "newsletterSignup.php";
$.ajax({
type: 'POST',
url: url,
data: params,
dataType: 'json',
beforeSend: function(){
alert("ASD");
document.getElementById("status").innerHTML='<img src="sending.gif"/>sending...';
},
success: function(data){
alert("success");
if(data.success == true){
document.getElementById("status").innerHTML= '<p>Sent!</p>' ;
}else{
document.getElementById("status").innerHTML= '<p>Error!</p>' ;
}
},
error: function(error){
alert("Gets ERRORA");
console.log(error);
}
});
}
值得注意的是,注册表单在页脚中,这是一个包含。不确定这是否相关。
编辑: beforeSend 中的警报正在显示,所以我知道它正在调用函数等。错误的警报不会被调用。日志中没有 XHR 消息。