javascript – 重定向到后端脚本后的新URL

我有一个signup.php页面,其中包含通过Facebook按钮登录.页面的结构是这样的

<?php
if(!isset($_SESSION['logged_in']))
{
    echo '<div id="results">';
    echo '<!-- results will be placed here -->';
    echo '</div>';
    echo '<div id="LoginButton">';
    echo '<a href="#" rel="nofollow" class="fblogin-button" onClick="javascript:CallAfterLogin();return false;">Login with Facebook</a>';
    echo '</div>';
}
else
{
    echo 'Hi '. $_SESSION['user_name'].'! You are Logged in to facebook, <a href="?logout=1">Log Out</a>.';
}
?>

此页面上使用的ajax代码调用另一个页面process_facebook.php并在后端处理数据.用于注册页面中的ajax的代码是

<script type="text/javascript">
window.fbAsyncInit = function() {
    FB.init({
        appId: '<?php echo $appId; ?>',
        cookie: true,xfbml: true,
        channelUrl: '<?php echo $return_url; ?>channel.php',
        oauth: true
        });
    };
(function() {
    var e = document.createElement('script');
    e.async = true;e.src = document.location.protocol +'//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);}());

function CallAfterLogin(){
    FB.login(function(response) {       
        if (response.status === "connected") 
        {
            LodingAnimate(); //Animate login
            FB.api('/me', function(data) {

              if(data.email == null)
              {
                    //Facbeook user email is empty, you can check something like this.
                    alert("You must allow us to access your email id!"); 
                    ResetAnimate();

              }else{
                    AjaxResponse();
              }

          });
         }
    },
    {scope:'<?php echo $fbPermissions; ?>'});
}

//functions
function AjaxResponse()
{
     //Load data from the server and place the returned HTML into the matched element using jQuery Load().
     $( "#results" ).load( "process_facebook.php" );
}

//Show loading Image
function LodingAnimate() 
{
    $("#LoginButton").hide(); //hide login button once user authorize the application
    $("#results").html('<img src="img/ajax-loader.gif" /> Please Wait Connecting...'); //show loading image while we process user
}

//Reset User button
function ResetAnimate() 
{
    $("#LoginButton").show(); //Show login button 
    $("#results").html(''); //reset element html
}

</script>

现在的问题是process_facebook.php页面在后端使用fb数据,之后被重定向回到signup.php页面,并显示process_facebook.php页面打印的数据(可选).我想要的是,而不是从process_facebook.php页面重定向到signup.php页面并显示其数据,我希望重定向到另一个页面,不仅新数据应该从新页面加载,而且url也应该得到已更改(即www.example.com/app/signup.php应更改为www.example.com/app/profile.php)

我忘了提到,但我已经尝试使用header()重定向,但它只是提取profile.php页面的数据,但显示www.example.com/app/signup.php url ..现在的问题是,如果我因任何原因刷新页面,然后加载旧的signup.php页面的数据

最佳答案
在函数文件中粘贴以下函数:

function redirect($url=NULL)
{
    if(is_null($url)) $url=curPageURL();
    if(headers_sent())
    {
        echo "<script>window.location='".$url."'</script>";
    }
    else
    {
        header("Location:".$url);
    }
    exit;
}

而这个函数的调用就像:

redirect($url);

所以当你从Facebook获取数据,所以在应用了$user_profile之后,你可以通过上面的功能重定向用户,这个功能会检查是否已经发送了头,然后它会使用javascript,否则会使用Header().

转载注明原文:javascript – 重定向到后端脚本后的新URL - 代码日志