Javascript 使用成功的Ajax请求进行页面重定向
我有一个使用Ajax进行客户端验证的表单。表格末尾如下所示:Javascript 使用成功的Ajax请求进行页面重定向,javascript,jquery,ajax,redirect,Javascript,Jquery,Ajax,Redirect,我有一个使用Ajax进行客户端验证的表单。表格末尾如下所示: $.ajax({ url: 'mail3.php', type: 'POST', data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam, success: function(result) { //console.log(result);
$.ajax({
url: 'mail3.php',
type: 'POST',
data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam,
success: function(result) {
//console.log(result);
$('#results,#errors').remove();
$('#contactWrapper').append('<p id="results">' + result + '</p>');
$('#loading').fadeOut(500, function() {
$(this).remove();
});
}
});
$.ajax({
url:'mail3.php',
键入:“POST”,
数据:'contactName='+name+'&contactEmail='+email+'&spam='+spam,
成功:功能(结果){
//控制台日志(结果);
$(“#结果,#错误”).remove();
$(“#contactWrapper”).append(“”+result+”
”);
$(“#加载”).fadeOut(500,function(){
$(this.remove();
});
}
});
编辑:这是我处理错误的mail3.php文件:
$errors=null;
if ( ($name == "Name") ) {
$errors = $nameError; // no name entered
}
if ( ($email == "E-mail address") ) {
$errors .= $emailError; // no email address entered
}
if ( !(preg_match($match,$email)) ) {
$errors .= $invalidEmailError; // checks validity of email
}
if ( $spam != "10" ) {
$errors .= $spamError; // spam error
}
if ( !($errors) ) {
mail ($to, $subject, $message, $headers);
//header ("Location: thankyou.html");
echo "Your message was successfully sent!";
//instead of echoing this message, I want a page redirect to thankyou.html
} else {
echo "<p id='errors'>";
echo $errors;
echo "</p>";
}
$errors=null;
如果(($name==“name”)){
$errors=$namererror;//未输入名称
}
如果($email==“电子邮件地址”)){
$errors.=$emailError;//未输入电子邮件地址
}
如果(!(预匹配($match,$email))){
$errors.=$invalidEmailError;//检查电子邮件的有效性
}
如果($spam!=“10”){
$errors.=$spamError;//垃圾邮件错误
}
如果(!($errors)){
邮件($to、$subject、$message、$headers);
//标题(“位置:thankyou.html”);
echo“您的邮件已成功发送!”;
//我希望页面重定向到thankyou.html,而不是重复此消息
}否则{
回显“”;
回音$错误;
回声“
”;
}
我想知道如果ajax请求成功并且没有错误,是否可以将用户重定向到感谢页面。这可能吗
谢谢!
Amit您可以在
success
处理程序中重定向,如下所示:
window.location.href = "thankyou.php";
或者,由于正在显示结果,请等待几秒钟,例如,这将等待2秒钟:
setTimeout(function() {
window.location.href = "thankyou.php";
}, 2000);
我认为你可以通过以下方式做到这一点:
window.location = "your_url";
我想你可以从两个方面来解决这个问题 1) 插入
window.location=http://www.yourdomain.com
进入成功功能
2) 使用进一步的ajax调用将其注入到页面上的元素中,您可以在jQuery文档中找到进一步的信息,当然可以。只需在成功功能的末尾添加以下内容:
if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html"
当不存在错误时,服务器返回响应
无错误
。只需执行一些错误检查,如果一切都通过了,则设置window.location
以将用户重定向到其他页面
$.ajax({
url: 'mail3.php',
type: 'POST',
data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam,
success: function(result) {
//console.log(result);
$('#results,#errors').remove();
$('#contactWrapper').append('<p id="results">' + result + '</p>');
$('#loading').fadeOut(500, function() {
$(this).remove();
});
if ( /*no errors*/ ) {
window.location='thank-you.html'
}
}
});
$.ajax({
url:'mail3.php',
键入:“POST”,
数据:'contactName='+name+'&contactEmail='+email+'&spam='+spam,
成功:功能(结果){
//控制台日志(结果);
$(“#结果,#错误”).remove();
$(“#contactWrapper”).append(“”+result+”
”);
$(“#加载”).fadeOut(500,function(){
$(this.remove();
});
如果(/*无错误*/){
window.location='thank-you.html'
}
}
});
在mail3.php文件中,您应该在try{}catch{}中捕获错误
try {
/*code here for email*/
} catch (Exception $e) {
header('HTTP/1.1 500 Internal Server Error');
}
然后在你的success
通话中,你就不必担心你的错误,因为它永远不会作为成功返回
您可以使用:window.location.href=“thankyou.php”代码>在您的成功函数中,如Nick所述。//在重定向之前创建延迟时间
// Create lag time before redirecting
setTimeout(function() {
window.location.href = "thankyou.php";
}, 2000);
$errors=null;
if ( ($name == "Name") ) {
$errors = $nameError; // no name entered
}
if ( ($email == "E-mail address") ) {
$errors .= $emailError; // no email address entered
}
if ( !(preg_match($match,$email)) ) {
$errors .= $invalidEmailError; // checks validity of email
}
if ( $spam != "10" ) {
$errors .= $spamError; // spam error
}
if ( !($errors) ) {
mail ($to, $subject, $message, $headers);
echo "Your message was successfully sent!";
//instead of echoing this message, I want a page redirect to thankyou.html
// redirect
setTimeout();
} else {
echo "<p id='errors'>";
echo $errors;
echo "</p>";
}
setTimeout(函数(){
window.location.href=“thankyou.php”;
}, 2000);
$errors=null;
如果(($name==“name”)){
$errors=$namererror;//未输入名称
}
如果($email==“电子邮件地址”)){
$errors.=$emailError;//未输入电子邮件地址
}
如果(!(预匹配($match,$email))){
$errors.=$invalidEmailError;//检查电子邮件的有效性
}
如果($spam!=“10”){
$errors.=$spamError;//垃圾邮件错误
}
如果(!($errors)){
邮件($to、$subject、$message、$headers);
echo“您的邮件已成功发送!”;
//我希望页面重定向到thankyou.html,而不是重复此消息
//重定向
setTimeout();
}否则{
回显“”;
回音$错误;
回声“
”;
}
我在另一个线程上发布了确切的情况。重新张贴
对不起,这不是对上面问题的回答
但是带来了一个有趣的话题——什么时候使用AJAX,什么时候不使用AJAX。在这种情况下,最好不要使用AJAX
让我们举一个简单的登录和密码示例。如果登录名和/或密码不匹配,最好使用AJAX报告一条简单消息,说“登录不正确”。但是如果登录名和密码正确,为什么我必须回调AJAX函数以重定向到用户页面
在这种情况下,我认为使用一个简单的表单提交会很好。如果登录失败,重定向到Relogin.php,它看起来与login.php相同,url中有一条GET消息,如Relogin.php?error=InvalidLogin。。。像这样的事
就我的2美分。:) $.ajax({
url:'mail3.php',
键入:“POST”,
数据:'contactName='+name+'&contactEmail='+email+'&spam='+spam,
成功:功能(结果){
//控制台日志(结果);
$(“#结果,#错误”).remove();
$(“#contactWrapper”).append(“”+result+”
”);
$(“#加载”).fadeOut(500,function(){
$(this.remove();
});
如果(结果==“无错误”)location.href=”http://www.example.com/ThankYou.html"
}
});
另一个选项是:
window.location.replace("your_url")
正确使用HTTP状态码将使每一次成功都获得成功,而服务器不必传回任何消息。@Jeremy-True,除非您想传回站点要处理的特定错误消息,或者甚至是失败时要重定向到的不同URL。这些消息必须返回200个响应代码,这就需要一个无错误响应来区分。实际上,从第一眼看,我觉得这个方法是可行的!是否可以获取mail3.php文件返回的$error变量(请参见编辑)并检查其内容。如果!($error),
window.location.replace("your_url")