Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP not redirecting when working with Jquery post [duplicate]

Tags:

jquery

php

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!

like image 235
Johny Avatar asked Jan 29 '13 03:01

Johny


2 Answers

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).

like image 196
rockerest Avatar answered Oct 21 '22 04:10

rockerest


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;
?>
like image 33
istos Avatar answered Oct 21 '22 05:10

istos