2014-05-03 73 views
0

我最近創建了一個Facebook應用程序,它將一些內容發佈到用戶組。如果用戶發佈到多個組,那麼我想顯示一個進度條。它的HTML部分我創建了一個具有文本區域的表單,表單重定向到post.php文件。然後我發佈到該post.php頁面中的用戶組。正如我所說,我使用進度條來顯示進度。但消息首先被髮布,然後只有進度條才起作用。我很確定它的工作進度條。在頁面加載後運行PHP

簡而言之,首先在JS或HTML之前執行PHP部分。所以請幫助我克服這個問題。

這是我在post.php中的文件:

<body style = "background-color: #4ea6e6;"> 
    <center> 
     <div style = "width: 50%; margin-top: 5%; padding: 50px; background-color: #fff;"> 
      <div class="input-group" style = "height: 30px;"> 
       <progress min = "0" max = "100" value = "50" style = "height: 30px;"> 

       </progress> 

       <span class="input-group-addon"> 
        0% 
       </span> 
      </div> 

      <br> 
      <div class = "message"> 

      </div> 

      <br> 
      <div class = "alert alert-success success" style = "font-size: 18px; font-family: Muli; visibility: hidden;"><b>Great !</b> Your message was successfully posted !</div> 

     </div> 

    </center> 
</body> <?php 

    require_once 'libs/facebook.php'; 
    $config = array(
     'appId' => 'My app id', 
     'secret' => 'my app secret', 
     'fileUpload' => false, // optional 
     'allowSignedRequest' => false, // optional, but should be set to false for non-canvas apps 
    ); 

    $facebook = new Facebook($config); 
    $groups = $_POST['groups']; 
    $link = $_POST['link']; 
    $message = $_POST['message']; 
    $count = count($groups); 

    for($i=1; $i<count($groups); $i++){ 

       $api = $facebook->api($groups[$i] . '/feed', 'post', array(
        link => $link, 
        message => $message 
       )); 

       $api = $facebook->api($groups[$i]); 

       $name = $api['name']; 

       $j = ($i/(count($groups)-1))*100; 

       ?> 

       <script type = "text/javascript"> 
       var timeout = setTimeout(post, 0); 
       function post(){ 

        $('progress').attr("value" , "<?php echo $j; ?>"); 
        $('.message').html("Posting to <?php echo $name; ?>"); 
        $('.input-group-addon').html("<?php echo $j; ?> %"); 

        if(<?php echo ($i/count($groups)); ?> != 1){ 
         var timeout = setTimeout(post, 0); 
        } 
        else{ 
         clearTimeout(timeout); 
        } 
       } 

       </script> 
       <?php 

      } 
+0

「說得短PHP的一部分被首先JS或HTML之前執行的」 - 當然,這就是客戶端 - 服務器模型的工作原理。 – elclanrs

+0

總是有'sleep()'函數,但在我看來,你的問題更多的是概念問題,也許使用ajax調用並通過JS延遲它們? –

+0

@elclanrs我想知道是否有任何可能的方式使其工作方式相反 – Srivathsan

回答

0

HTML和JS被加載後,您不能執行同步PHP。

但如此,一旦JS加載AJAX調用啓動和PHP腳本在後臺執行,你可以執行XHR調用PHP腳本

這裏是how to use AJAX with jQuery

0

可以執行一個單獨的PHP文件在頁面加載後,沒有JS,像這樣。

請注意,「背景圖像」實際上是一個PHP文件。 PHP文件在body文檔的底部被調用時,會在html文件及其上的所有元素之後執行。

您可以在CSS屬性通過GET將數據發送到PHP文件...

<!DOCTYPE html> 
<html> 
<head> 
<title></title> 
<style> 
#runPHP 
{ 
    background-image:url(script.php); 
    display:none; 
} 
</style> 
</head> 
<body> 

<div id="runPHP"></div> 
</body> 
</html>