10

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!

4

3 に答える 3

5

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

于 2013-01-29T03:03:19.237 に答える
1

出力バッファをどこでフラッシュしますか?リダイレクトob_end_flush();の後に追加してみて、それが機能するかどうかを確認してください。header()

編集: たぶん、相対URIを絶対URIに変えると、問題が解決するでしょう。これは、php.netから直接取得した一般的な例です。相対URIに基づいて絶対URIを作成します。この方法ではなく、常に絶対URIをハードコーディングできます。

<?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;
?>
于 2013-01-29T03:07:11.473 に答える
0

AJAX呼び出しで完全なURLを使用してみてください。

それ以外の:

    url: "includes/process/processAdminLogin.php",

試す:

    url: "http://www.mysite.com/includes/process/processAdminLogin.php",
于 2013-01-29T03:04:08.307 に答える