gpt4 book ai didi

javascript - AJAX表单提交,仅用于防止页面刷新,仅此而已

转载 作者:行者123 更新时间:2023-12-03 09:57:23 33 4
gpt4 key购买 nike

我已经构建了一个简单的 HTML/PHP 电子邮件注册表单,该注册表单显示在我网站的页脚区域中。只有两个字段:电子邮件国家/地区

该表单非常适合我的目的。数据收集、验证、清理、错误处理、清除字段、成功通知等——一切都好!

我的最后一步是实现 AJAX 以防止页面刷新。这就是 AJAX 所需要的全部内容。

我发现此网站上的所有教程、文章和相关问题的答案都提供了包含我已经使用 PHP 处理过的函数的代码。

我已经完成了 AJAX 提交,它有效。页面不会刷新,用户输入已插入数据库,并且我收到确认电子邮件。

我希望得到一些指导(或教程的链接),它可以帮助我实现 PHP 错误逻辑并回显 PHP 成功/错误消息。

HTML

<form action="process_footer_form/" method="post" id="footer-form">

<ul>

<li>
<input type="email" name="email" id="email"
value="<?php if (isset($email)) {echo $email;} ?>">
</li>

<li>
<input type="text" name="country" id="country"
value="<?php if (isset($country)) {echo $country;} ?>">
</li>

<li>
<input type="submit" name="submit" id="submit">
</li>

</ul>

<?php if (isset($success_message)) {echo $success_message;} ?>
<?php if (isset($error_message)) {echo $error_message;} ?>

</form>

JQuery

$(function() {

// identify form
var form = $('#footer-form');

// create event listener
$(form).submit(function(event) {

// disable html submit button
event.preventDefault();

// serialize form data
var formData = $(form).serialize();

// submit form using AJAX
$.ajax({
type: 'POST',
url: $(form).attr('action'),
data: formData
})

.done(function(response) {

// 1. echo PHP success message
// 2. fire PHP clear fields command

})

.fail(function(data) {

// 3. execute PHP error logic here
// 4. echo PHP error messages

});
});
});

PHP

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

// Load PHPMailer
require 'PHPMailer/PHPMailerAutoload.php';

// Create PHPMailer session
$mail = new PHPMailer;
$mail->CharSet = "UTF-8";

// SMTP settings
$mail->isSMTP();
$mail->Host = 'smtp.xxxxxxxxxx.com';
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->Username = 'xxxxxxxxxxxxxxxxxx';
$mail->Password = 'xxxxxxxxxxxxxxxxxx';

$mail->setFrom('xxxxxxxxxxxxxxxxxx' , 'xxxxxxxxxxxxxxxxxx');
$mail->addAddress('xxxxxxxxxxxxxxxxxx');
$mail->isHTML(true);

// Sanitize & Validate Input
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$country = trim(filter_input(INPUT_POST, 'country', FILTER_SANITIZE_SPECIAL_CHARS));

// set connection to mysql server
$connection = mysql_connect("localhost","xxxxxxxxxxxxxxxxxx","xxxxxxxxxxxxxxxxxx");

// connect to database
mysql_select_db("xxxxxxxxxxxxxxxxxx", $connection);

// insert user input to table
$sql = "INSERT INTO email_subscribers (email,country) VALUES ('$email','$country')";

if (!$connection) {

$error_message = <<<ERROR
<div>ERROR. Form not sent. Please try again or <a href="contact/">contact us</a>.</div>
ERROR;

// Send error notice to host
$mail->Subject = 'Website Error - Footer Form';
$mail->Body = ("Error Notice: A site user is having trouble on the footer form.");
$mail->send();

} else {

// run query
mysql_query($sql, $connection);

$success_message = <<<CONFIRMATION
<div>Subscription complete. Thank you!</div>
CONFIRMATION;

mysql_close($connection);

// Send confirmation notice to host.
$message = <<<HTML
<span>E-mail: {$email}</span><br>
<span>Country: {$country}</span>
HTML;

$mail->Subject = 'New E-mail Subscriber - Footer Form';
$mail->Body = $message;
$mail->send();

unset($email, $country);
}
} else {

header('Location: http://www.mywebsite.com/');
exit;

}
?>

最佳答案

您可以尝试使用 FormData 来简化您的生活目的。那么你的代码可能看起来像这样。我已经测试过了。

<form method="POST" id="subscription-form" enctype="multipart/form-data">
<input type="email" name="email" id="email" value="gulliver@tinyletter.com">
<input type="text" name="country" id="country" value="Lilliput">
<input type="button" value="submit" id="form-submit">
</form>

在此之下,您可以放入一个 div 来显示消息:

<div id="messages"></div>

然后你的 jquery/javascript 看起来像这样:

<script>
(function(){
$("#form-submit").on("click", function(){ submitForm();});
})();


function submitForm(){
var form = document.getElementById("subscription-form");
var fd = new FormData(form);
$.ajax({
url: './PHPscript.php',
data: fd,
processData: false,
contentType: false,
type: 'POST',
success: function(data){
$("#messages").html(data);
}
});
}
</script>

关于让 PHP“处理消息”,我认为您错过了有关 AJAX 的一些内容。

在您的初始 PHP 页面中,您将加载 PHP 生成的 html,然后 PHP 部分就完成了。当您进行 AJAX 调用时,您要求服务器执行不同的 PHP 脚本,然后将该脚本的输出返回给 javascript。

此时,您需要将 PHP 生成的任何消息放回当前页面,该页面没有也不会重新加载。这就是使用 AJAX 的首要目的。这就是“messages”div 的用途。

作为完全理解这一点的一种方式,创建一个非常简单的 PHPscript.php 文件,如下所示并尝试一下:

<?php
print $_POST['email'] . ' ' . $_POST['country'];
?>

您将在该消息 div 内的当前页面中看到返回的值。

关于javascript - AJAX表单提交,仅用于防止页面刷新,仅此而已,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687143/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com