我是一名真正的新程序员,正在努力完成我现在正在努力并尝试了几天的任务。
我搜索了 Google 和 Stack Overflow,但找不到(对我来说可以理解的)问题解决方案:
我创建了一个 Twitter Bootstrap 登录页面,单击时会显示一个模式。在此模式中,我有一个包含时事通讯订阅的表单:
<form id="newsletter" method="post">
<label for="email">Email:</label><br/>
<input type="text" name="email" id="email"/><br/>
<button type="submit" id="sub">Save</button>
</form>
<span id="result"></span>
现在我想将数据插入 mySQL 数据库并执行一些返回错误或成功消息的基本验证。该脚本在没有 ajax 的情况下工作正常,但可能需要更改它为 ajax 返回的内容?
include("connection.php");
if ($_POST['email']) {
if(!empty($_POST['my_url'])) die('Have a nice day elsewhere.');
if (!$_POST['email']) {
$error.=" please enter your email address.";
} else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$error.=" please enter a valid email address.";
}
if($error) {
$error= "There was an error in your signup,".$error;
} else {
$query="SELECT * FROM `email_list` WHERE email='".mysqli_real_escape_string($link, $_POST['email'])."'";
$result = mysqli_query($link, $query);
$results = mysqli_num_rows($result);
if ($results) {
$error.=" this email address is already registered.";
} else {
$query = "INSERT INTO `email_list` (`email`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."')";
mysqli_query($link, $query);
$message = "Thanks for subscribing!";
}
}
}
经过大量阅读后,ajax 似乎是在提交后无需关闭 Bootstrap 模式的方法(以抑制默认事件)。
插入数据库工作正常,验证也正常。
但是我无法设法显示不同的错误消息(存储在 php 文件的 $error 变量中),或者在成功的情况下显示 $message。
这是 jquery 脚本:
$("#sub").submit(function (){
event.preventDefault();
$.ajax( {
url: "newsletter2.php",
type: "POST",
data: {email: $("#email").val()},
success: function(message) {
$("#result").html(message);
},
error: function(error) {
$("#result").html(error);
}
});
我尝试在 #result 范围内的 php 脚本中显示错误和消息变量的值。
感谢任何帮助。请非常直接地表述它,因为我对这个领域真的很陌生。
提前非常感谢您。
编辑: 在 php 文件中添加了一些内容以创建数组并将消息存储在其中:
$response = array();
$response['success'] = $success;
$response['error']= $errors;
exit(json_encode($response));
但是要让 ajax 工作仍然遇到一些麻烦。尝试了简写 $.post 而不是 $.ajax,但现在他们甚至不能开始发布数据......
$("#sub").submit(function (){
event.preventDefault();
$.post("newsletter.php", {email: $("#email").val() });
});
非常感谢快速的时间。经过几个小时的测试后我陷入困境,找不到错误。如果我定期提交表单,它工作正常,所以 php/mysql 部分不是问题。
我还意识到,当我单击“#sub”按钮时,它仍然尝试通过 get 提交表单(URL 获取传递的值)。所以我不确定 event.preventDefault(); 是否有效不工作? jQuery 已安装并正在运行。
最佳答案
当出现连接错误或无法找到请求的页面时,将调用 $.ajax 错误函数
您必须使用 php 打印一些文本,并且 ajax success 函数会获取此输出。然后你解析这个输出,看看它是如何进行的。
最佳实践是这样的:
php部分:
$response = array();
$response['success'] = $success;
$response['general_message'] = $message;
$response['errors'] = $errors;
exit(json_encode($response));
js/html部分:
$.post("yourpage.php", a , function (data) {
response = JSON.parse(data);
if(response['success']){
//handle success here
}else{
//handle errors here with response["errors"] as error messages
}
});
祝你的项目顺利
关于php - 使用ajax从php脚本返回成功/失败变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531598/