2015-01-16 16 views
10

Tôi có trang signup.php có chứa thông tin đăng nhập qua nút facebook. cấu trúc của trang giống như sau:chuyển hướng đến url mới sau tập lệnh phụ trợ

<?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>.'; 
} 
?> 

mã ajax được sử dụng trên trang này gọi một trang khác process_facebook.php và xử lý dữ liệu ở phần cuối. mã được sử dụng cho ajax trong trang signup.php là

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

Bây giờ vấn đề là trang process_facebook.php làm việc với dữ liệu fb tại phụ trợ, và sau đó được chuyển hướng trở lại trang signup.php và hiển thị dữ liệu mà trang process_facebook.php đã được in (tùy chọn). Những gì tôi muốn là thay vì chuyển hướng từ trang process_facebook.php trở lại trang signup.php và hiển thị dữ liệu của nó, tôi muốn chuyển hướng đến một trang khác, không chỉ dữ liệu mới sẽ được tải từ trang mới mà còn có được url (ví dụ: www.example.com/app/signup.php nên thay đổi thành www.example.com/app/profile.php)

tôi quên đề cập đến nhưng tôi đã thử sử dụng tiêu đề() để chuyển hướng nhưng nó chỉ đơn giản là lấy dữ liệu của trang profile.php nhưng hiển thị địa chỉ www.example.com/app/signup.php. Bây giờ vấn đề ở đây là nếu tôi làm mới trang vì bất kỳ lý do nào, thì dữ liệu của tệp signup.php cũ trang được tải

+0

Uhm, có thể tôi đang thiếu một cái gì đó, nhưng tại sao bạn chỉ đơn giản là không sử dụng chức năng header() trong process_facebook.php của bạn? Kiểm tra http://stackoverflow.com/questions/768431/how-to-make-a-redirect-in-php để biết thêm chi tiết. – Vick

+0

tiêu đề ('Vị trí: you_url_here'); Sử dụng điều này bất cứ khi nào bạn cần chuyển hướng thông qua PHP –

+0

@Vick tôi đã thử sử dụng tiêu đề nhưng thay vì chuyển hướng đến url khác, tìm nạp dữ liệu của trang tiểu sử mới và hiển thị url www.example.com/app/signup.php. và nếu tôi tải lại trang thì tôi đang nhận được dữ liệu của trang đăng ký cũ – Sam

Trả lời

0

Tiêu đề cần phải đi ở đầu trang, trước khi bất kỳ HTML nào xuất ra cho ứng dụng khách. Bạn cũng có thể xuất dữ liệu khi máy chủ đi xuống trang "viết" HTML cho khách hàng.

Trước khi bất kỳ HTML, nhưng sau khi mở sử dụng PHP này:

header('Location: http://www.example.com/'); 

Referr tới: http://php.net/manual/en/function.header.php

+0

u có thể làm thế nào để làm điều đó – Sam

+0

Đã giải quyết nó? –

0

Nếu tôi làm theo đúng, bạn đang sử dụng Facebook cho phiên người dùng và tất cả các mã Facebook bạn đang sử dụng là Javascript, do đó bạn muốn sử dụng javascript để thực hiện chuyển hướng ...

document.location = '/profile.php'; 

Nhu cầu đó xảy ra ở bất kỳ nơi nào cuộc gọi đến đầu cuối hoàn thành.

0

Chỉ cần áp dụng die(); sau cuộc gọi tiêu đề của bạn.

+0

Trong khi điều này trả lời câu hỏi, bạn nên đặt một số văn bản trong câu trả lời của mình để giải thích những gì bạn đang làm. Đọc [cách viết câu trả lời hay] (http://stackoverflow.com/help/how-to-answer). – jurgemaister

0

Như Harry đã nói, bạn chắc chắn sẽ muốn thực hiện điều này thông qua JS.

document.location = '/profile.php'; 

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

       if(FBdata.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{ 
        //you need to call some php script via ajax here to send these details to your server. 
        $.post('fbResponseParse.php',FBdata) 
        // your php should return some sort of an ok, or even a url for you to redirect to. 
        //if it fails you need to display an error not redirect. 
         .done(function(data){ 
         //data in this scope is the response from your php script. 
          if(data.success) document.location = '/profile.php'; 
          else displayError(data.errorMess) 
         }) 
       } 

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

Vì vậy, những gì bạn đang làm là sử dụng JS để nói chuyện với Facebook. Sau đó, khi phản ứng đó bạn gửi nó đến đầu cuối của bạn thông qua AJAX. Đầu cuối của bạn sẽ phân tích cú pháp dữ liệu, tạo chi tiết phiên, quan trọng nhất là nó gửi cho bạn thành công (bool) và errorMess (nếu có), sau đó bạn sử dụng .done để phân tích thành công/thất bại và hiển thị thông báo. Điều này sẽ giữ khách hàng ở đây, trên trang đăng ký trừ khi công cụ facebook là một thành công.

1

Thực hiện một dán điều dưới đây chức năng trong tập tin chức năng của bạn: -

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

Và cuộc gọi chức năng này như:

redirect($url); 

vì vậy khi bạn sẽ nhận được dữ liệu từ facebook nên sau khi áp dụng kiểm tra $ user_profile bạn có thể chuyển hướng người dùng thông qua chức năng trên, chức năng này sẽ kiểm tra xem header đã được gửi rồi thì nó sẽ sử dụng javascript khác nó sẽ sử dụng Header().

Các vấn đề liên quan