PHP not redirecting when working with Jquery post
Possible Duplicate:
How to manage a redirect request after a jQuery Ajax call
I have a form that is validated client-side with Jquery. Jquery then passes this data to a php script for server-side validation. At the end of the php script, I try to redirect upon success, but no re-direction happens.
Is Jquery interfering with the redirection? How can I get the php script to redirect. Don't want to redirect with jquery, bc I am going to use sessions and want to keep the session data at redirection.
Here is the code:
JQUERY:
$.ajax({
//this is the php file that processes the data and send mail
url: "includes/process/processAdminLogin.php",
//POST method is used
type: "POST",
//pass the data
data: dataString,
//indicate result is text
dataType: "text",
//Do not cache the page
cache: false,
//success
success: function (data) {
$('input').removeAttr('disabled'); //enable input fields again.
if(data == "fail"){
$("#statusMessage").html("");
$("#statusMessage").html("<p class='statusBoxWarning'>Username and password do not match!</p>");
$('button').removeAttr('disabled');
document.forms[0].reset();
}
}
});
PHP
if($correctPass == 1){
ob_start();
session_start();
$_SESSION['usernameIdentity'] = $userName;
unset($userName, $userPass);
header("Location: ../../adminDashboard.html");
exit;
}else{
echo "fail";
}
The php script gets to the redirection part and just hangs up. I would really want to keep jquery functionality, along with php redirection. Is there a better method?
Thanks!
FINAL WORKING SOLUTION:
Ok, after the input from this post and other similar posts, this is what I have as the working solution. It may not be the most efficient or prettiest solution, but it works, and will have to do for now.
JQUERY
$.ajax({
//this is the php file that processes the data and send mail
url: "includes/process/processAdminLogin.php",
//GET method is used
type: "POST",
//pass the data
data: dataString,
//indicate result is text
dataType: "text",
//Do not cache the page
cache: false,
//success
success: function (data) {
$('input').removeAttr('disabled'); //enable input fields again.
if(data == "success"){
$('#statusMessage').html('<form action="http://www.example.com/test/userRegistration/adminDashboard.html" name="userSubscription" method="post" style="display:none;"><input type="text" name="username" value="' + reg_contact_username + '" /><input type="text" name="password" value="' + reg_contact_password + '" /></form>');
document.forms['userSubscription'].submit();
}else{alert("couldn t redirect");}
}
});
PHP
if($correctPass == 1){
echo "success";
}else{
echo "fail";
}
The receiving redirection page will have to verify username and password being given again, so validation will be done 2x...which is really inefficient. If anybody can provide me with a better solution - please! A sample write out would also help out.
Thanks!
Since AJAX happens "behind the scenes" (so to speak) your redirect will just interrupt the response to your javascript handler.
You'll need to return the URL and have your callback kick the browser to a new location.
Update:
On this note, since you have to return data to the front end, you'll want to add a status
or similar variable so that you can switch your front end behavior based on whether the call "failed" or not.
Update 2:
In response to your solution, I strongly recommend against your form submission technique. As you say, it's not efficient, it's not pretty, and it requires twice the work (validating the user 2 times).
Why don't you use PHP's built in session handling to set a session if the user logs in successfully, and then simply check the session after a simple javascript browser redirect?
A javascript redirect is as simple as window.href = "http://mylocation"
and if you don't know much about PHP's sessions, you could use this class I've built up (please disregard that it's also managing cookies, that's a silly oversight).
Where are you flushing your output buffer? Try to add ob_end_flush();
after the header()
redirection and see if that works.
EDIT: Maybe turning your relative URI to an absolute URI will fix your issue. This is a general example directly pulled from php.net. It creates an absolute URI based on a relative one - you could always hard-code the absolute URI instead of doing it this way.
<?php
/* Redirect to a different page in the current directory that was requested */
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>
Try using the full url in the AJAX call.
Instead of:
url: "includes/process/processAdminLogin.php",
Try:
url: "http://www.mysite.com/includes/process/processAdminLogin.php",
链接地址: http://www.djcxy.com/p/12462.html
上一篇: JS烧瓶上的模板点击事件
下一篇: PHP在使用Jquery帖子时不重定向