【发布时间】:2014-09-10 17:42:30
【问题描述】:
一直在搜索这个站点并找到许多 AJAX 到 PHP 的示例,但是按照这些我无法理解为什么我的脚本无法正常工作。
我有一个带有按钮的 HTML 表单。您单击它调用 Bootstrap 模式窗口的按钮。您输入一个电子邮件地址点击提交。
它发布到一个 PHP 文件,该文件将通过电子邮件发送给我。
我使用 AJAX 实现的原因是因为我不希望 ACTION 和 METHOD 在表单上提交。我想通过 AJAX 提交,这样用户就不会被重定向到我的 PHP 页面。
这是我的 HTML:
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"> </script>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/styles.css" rel="stylesheet">
<script>
$(document).ready(function () {
$("button#submit").click(function(){
$.ajax({
type: "POST",
url: "email.php", //
data: $('form.icontact').serialize(),
success: function(msg){
$("#thanks").html(msg)
$("#contact").modal('hide');
},
error: function(){
alert("failure");
}
});
});
});
</script>
</head>
<body>
<div class="container"> <!-- numbers cannot total more than 12 for rows-->
<div id="thanks"><p><a href="#contact" data-toggle="modal" class="btn btn-success">Submit!</a></p></div>
</div>
<!--contact modal-->
<div class="modal fade"id="contact" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<form class ="form-horizontal" name="icontact" id="icontact">
<div class="modal-header">
<h4>testemail</h4>
</div>
<div class="modal-body">
<p>Please enter your email address and click submit to receive your free first chapter</p>
<div class="form-group">
<label for ="contact-email" class="col-lg-2 control-label">Email: </label>
<div class="col-lg-10">
<input type="email" class="form-control" id="fromaddress" placeholder="new@example.com" name="fromaddress" />
<input type="hidden" id ="subject" value="enter in your email" name="subject" />
</div>
</div>
</div>
<div class="modal-footer">
<a class="btn btn-default" data-dismiss="modal">Cancel</a>
<button class="btn btn-primary" type="submit" id="submit">Send</button>
</div>
</form>
</div>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> </script>
<script src="js/bootstrap.js"></script>
</body>
这里是 php 文件。我在运行它时失败了,它像 GET 一样在 URL 中传递数据。我究竟做错了什么?
<?php
function spamcheck($field) {
// Sanitize e-mail address
$field=filter_var($field, FILTER_SANITIZE_EMAIL);
// Validate e-mail address
if(filter_var($field, FILTER_VALIDATE_EMAIL)) {
return TRUE;
} else {
return FALSE;
}
}
if (isset($_POST["fromaddress"])) {
// Check if "from" email address is valid
$mailcheck = spamcheck($_POST["fromaddress"]);
if ($mailcheck==FALSE) {
echo "Invalid input";
} else {
echo "<span class=\"alert alert-success\" >Your message has been received. Thanks!</span><br><br>";
$from = strip_tags($_POST["fromaddress"]); // sender
$subject = strip_tags($_POST["subject"]);
$message = "Thanks.";
// message lines should not exceed 70 characters (PHP rule), so wrap it
$message = wordwrap($message, 70);
// send mail
mail("test@test.com",$subject,$message,"From: $from\n");
}
}
?>
【问题讨论】:
-
$('form.icontact').serialize()首先应该是$('#icontact').serialize() -
$("button#submit").click(你不应该依赖用户点击按钮来提交表单——这不是提交表单的唯一方式。始终收听提交$('#icontact').submit(function(){}) -
另一件事 - 你已经把你的 javascript 包含在它们所属的地方,但出于某种原因,
<head>中的程序脚本。它属于</body>之前的includes之后。 -
感谢所有这些 cmets 他们解决了我的问题。
标签: php ajax twitter-bootstrap modal-dialog