我是一个真正的新编码员,正在努力完成我正在努力并尝试了几天的任务。
我搜索了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似乎是在提交后没有引导模式关闭的方式(禁止默认事件)。
插入数据库工作正常,也是验证。
但是我无法设法显示不同的错误消息(存储在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已安装并正常工作。
答案 0 :(得分:0)
您需要echo
将您的消息发送回您的AJAX。您的PHP代码中没有地方消息将返回到AJAX成功中的message
变量。
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.";
echo $error; die;
} else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$error.=" please enter a valid email address.";
echo $error; die;
}
if($error) {
$error= "There was an error in your signup,".$error;
echo $error; die;
} 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.";
echo $error; die;
} else {
$query = "INSERT INTO `email_list` (`email`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."')";
mysqli_query($link, $query);
$message = "Thanks for subscribing!";
echo $message; die;
}
}
}
答案 1 :(得分:0)
当出现连接错误或无法找到请求的页面时,会调用$ .ajax错误函数
你必须用php打印一些文本,ajax success函数获取此输出。然后你解析这个输出,看看它是怎么回事。
最佳做法是:
php部分:
$response = array();
$response['success'] = $success;
$response['general_message'] = $message;
$response['errors'] = $errors;
exit(json_encode($response));
js / html part:
$.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
}
});
祝你的项目好运
答案 2 :(得分:0)
我基本上只有同样的情况。我的代码结构有点不同,但它的工作原理......
$("#sub").submit(function (){
event.preventDefault();
$.ajax( {
url: "newsletter2.php",
type: "POST",
dataType: 'json',
data: {email: $("#email").val()},
})
.success(function(message) {
$("#result").html(message);
}),
.error(function(error) {
$("#result").html(error);
})
在服务器端我使用C#(asp.net)并返回了一个Json
return Json(new { Message = "Something...", Passed = true}, JsonRequestBehavior.AllowGet);
答案 3 :(得分:0)
Oukay,最后我设法通过这里的大输入来解决问题。我做了以下事情:
PHP:
$response = array();
$response['success'] = $success;
$response['error'] = $error;
exit(json_encode($response));
JS:
$("#newsletter").submit(function(event) {
event.preventDefault();
$.ajax({
url: 'newsletter3.php',
method: 'post',
data: {email: $('#email').val()},
success: function(data) {
var response = JSON.parse(data);
console.log(response);
if (response['success']) {
$("#error").hide();
$("#success").html(response['success']);
$("#success").toggleClass("alert alert-success");
} else {
$("#error").html(response['error']);
if(!$("#error").hasClass("alert alert-danger"))
$("#error").toggleClass("alert alert-danger");
}
}
});
});
现在的功能是你点击一个按钮和一个模式弹出窗口,然后你可以输入你的电子邮件,php脚本验证它是否有效以及它是否已经在数据库中。错误和成功消息获得JSON编码,然后显示在根据引导类危险或成功改变颜色的范围中。
非常感谢您帮助我,我对第一个解决的编码问题感到非常满意:)
答案 4 :(得分:0)
我在我的ajax上使用它
request.done(function (response, data) {
$('#add--response').html(response);
});
和PHP上的这个
die("Success! Whatever text you want here");