AJAX 总是返回主页
AJAX always returning into Home Page
有没有人可以帮助我解决我的问题。
我有 3 个文件 index.php
process.js
redirect_process.php
。
嗯,index.php
是我的主页,里面有一个表格。
并且每次单击 button submit
时都会调用 process.js
以验证表单数据,因此,如果输入数据错误,简单地说,不要 return 为真并显示一些错误message, else return 变为 true,然后使用 redirect_process.php
重定向到另一个页面。
这是我的 process.js
:
代码
$(document).ready(function(){
$('#form_side').submit(function() {
var name_this = /^[a-zA-Z-' ]+$/;
var return_process = false;
if(name_this.test(document.getElementById("input_field_one").value) == false){
alert('Error!');
return_process = false;
}else{
$.ajax({
type:"POST",
url:"./r_p/redirect_process.php",//the link to call redirect process
data: $("#my_form").serialize(),
success: function(response){
$("#my_form").trigger('reset');
} });
//No more validation here, so i want to go into another page now by returning into TRUE
return_process = true; //This will be the cause now to go to another page.
}
return return_process;
});
});
所以现在可以说输入数据没有错误,我现在想使用 redirect_process.php
重定向到另一个页面。这是我的 redirect_process.php
:
代码
...Some validation here
if (data is ok, and no error) {
//Redirect into correct page
header('Location: http://localhost/test/correct_page.php');
}else{
//Redirect into wrong page
header('Location: http://localhost/test/wrong_page.php');
}
问题是,它总是 return 进入 index.php
而不是在上面的任何 link 中重定向。
请我帮助我。谢谢!
应该这样做:
$(document).ready(function(){
$('#form_side').submit(function(event) {
var name_this = /^[a-zA-Z-' ]+$/;
var return_process = false;
if(name_this.test(document.getElementById("input_field_one").value) == false){
alert('Error!');
return_process = false;
}else{
$.ajax({
type:"POST",
url:"./r_p/redirect_process.php",//the link to call redirect process
data: $("#my_form").serialize(),
success: function(response){
$("#my_form").trigger('reset');
} });
}
event.preventDefault(); //this line prevents the form from executing it's action, which is none and that triggers a reload.
return false;
});
});
您正在通过 jQuery.submit
调用 onsubmit 事件。解析后,此事件会触发表单操作。由于定义了none,因为你使用AJAX,这会触发重新加载。
event.preventDefault()
这会阻止事件触发操作。
...Some validation here
if (data is ok, and no error) {
//Redirect into correct page
header('Location: http://localhost/test/correct_page.php');
}else{
//Redirect into wrong page
header('Location: http://localhost/test/wrong_page.php');
}
header 行有效,但不适用于您的情况。它告诉浏览器加载页面响应。此响应被加载到 AJAX 响应中,而不是重定向当前页面。使用 @Mohamed-Yousef 答案作为指导。
肯定会在您的 index.php 中发生所有事情,因为您在 php 文件中调用 header,您将其与 ajax 一起使用,header 将如果你直接去 redirect_process.php 工作
(并且总是在 header(); 之后使用 exit();)
在 php
中做到这一点
...Some validation here
if (data is ok, and no error) {
echo('OK');
}else{
echo('Not OK');
}
然后在js中提交事件
$(document).ready(function(){
$('#form_side').submit(function(e) {
e.preventDefault; // use e.preventDefault;
var name_this = /^[a-zA-Z-' ]+$/;
var return_process = false;
if(name_this.test(document.getElementById("input_field_one").value) == false){
alert('Error!');
return_process = false;
}else{
$.ajax({
type:"POST",
url:"./r_p/redirect_process.php",//the link to call redirect process
data: $("#my_form").serialize(),
success: function(response){
$("#my_form").trigger('reset');
if(response == 'OK'){
window.location.href= "http://localhost/test/correct_page.php";
}else{
window.location.href= "http://localhost/test/wrong_page.php";
}
} });
//No more validation here, so i want to go into another page now by returning into TRUE
return_process = true; //This will be the cause now to go to another page.
}
return return_process;
});
});
有没有人可以帮助我解决我的问题。
我有 3 个文件 index.php
process.js
redirect_process.php
。
嗯,index.php
是我的主页,里面有一个表格。
并且每次单击 button submit
时都会调用 process.js
以验证表单数据,因此,如果输入数据错误,简单地说,不要 return 为真并显示一些错误message, else return 变为 true,然后使用 redirect_process.php
重定向到另一个页面。
这是我的 process.js
:
$(document).ready(function(){
$('#form_side').submit(function() {
var name_this = /^[a-zA-Z-' ]+$/;
var return_process = false;
if(name_this.test(document.getElementById("input_field_one").value) == false){
alert('Error!');
return_process = false;
}else{
$.ajax({
type:"POST",
url:"./r_p/redirect_process.php",//the link to call redirect process
data: $("#my_form").serialize(),
success: function(response){
$("#my_form").trigger('reset');
} });
//No more validation here, so i want to go into another page now by returning into TRUE
return_process = true; //This will be the cause now to go to another page.
}
return return_process;
});
});
所以现在可以说输入数据没有错误,我现在想使用 redirect_process.php
重定向到另一个页面。这是我的 redirect_process.php
:
...Some validation here
if (data is ok, and no error) {
//Redirect into correct page
header('Location: http://localhost/test/correct_page.php');
}else{
//Redirect into wrong page
header('Location: http://localhost/test/wrong_page.php');
}
问题是,它总是 return 进入 index.php
而不是在上面的任何 link 中重定向。
请我帮助我。谢谢!
应该这样做:
$(document).ready(function(){
$('#form_side').submit(function(event) {
var name_this = /^[a-zA-Z-' ]+$/;
var return_process = false;
if(name_this.test(document.getElementById("input_field_one").value) == false){
alert('Error!');
return_process = false;
}else{
$.ajax({
type:"POST",
url:"./r_p/redirect_process.php",//the link to call redirect process
data: $("#my_form").serialize(),
success: function(response){
$("#my_form").trigger('reset');
} });
}
event.preventDefault(); //this line prevents the form from executing it's action, which is none and that triggers a reload.
return false;
});
});
您正在通过 jQuery.submit
调用 onsubmit 事件。解析后,此事件会触发表单操作。由于定义了none,因为你使用AJAX,这会触发重新加载。
event.preventDefault()
这会阻止事件触发操作。
...Some validation here
if (data is ok, and no error) {
//Redirect into correct page
header('Location: http://localhost/test/correct_page.php');
}else{
//Redirect into wrong page
header('Location: http://localhost/test/wrong_page.php');
}
header 行有效,但不适用于您的情况。它告诉浏览器加载页面响应。此响应被加载到 AJAX 响应中,而不是重定向当前页面。使用 @Mohamed-Yousef 答案作为指导。
肯定会在您的 index.php 中发生所有事情,因为您在 php 文件中调用 header,您将其与 ajax 一起使用,header 将如果你直接去 redirect_process.php 工作 (并且总是在 header(); 之后使用 exit();)
在 php
中做到这一点...Some validation here
if (data is ok, and no error) {
echo('OK');
}else{
echo('Not OK');
}
然后在js中提交事件
$(document).ready(function(){
$('#form_side').submit(function(e) {
e.preventDefault; // use e.preventDefault;
var name_this = /^[a-zA-Z-' ]+$/;
var return_process = false;
if(name_this.test(document.getElementById("input_field_one").value) == false){
alert('Error!');
return_process = false;
}else{
$.ajax({
type:"POST",
url:"./r_p/redirect_process.php",//the link to call redirect process
data: $("#my_form").serialize(),
success: function(response){
$("#my_form").trigger('reset');
if(response == 'OK'){
window.location.href= "http://localhost/test/correct_page.php";
}else{
window.location.href= "http://localhost/test/wrong_page.php";
}
} });
//No more validation here, so i want to go into another page now by returning into TRUE
return_process = true; //This will be the cause now to go to another page.
}
return return_process;
});
});