2014-05-03 4 views
0

Недавно я создал приложение facebook, которое отправляет некоторый контент в группу пользователей. Если пользователь отправляет несколько групп, я хотел бы отобразить индикатор выполнения. Часть HTML из него Я создал форму, которая получила текстовую область, и форма перенаправляется в файл post.php. И отправляю в группы пользователей на этой странице post.php. Как я уже сказал, я использую индикатор прогресса, чтобы показать прогресс. Но сообщение сначала публикуется, и только тогда работает индикатор выполнения. Я уверен, что он работает.Запуск PHP после загрузки страницы

Короче говоря, часть PHP выполняется сначала перед JS или HTML. Поэтому, пожалуйста, помогите мне в преодолении этой проблемы.

Это то, что у меня есть в файле 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

Вы не можете выполнить синхронизацию PHP после загрузки HTML и JS.

НО вы можете выполнить вызов XHR в PHP скрипт так, что когда-Js загружается запускается вызов AJAX и PHP скрипт выполняется в фоновом режиме

Вот how to use AJAX with jQuery

0

Вы можете выполнить отдельный PHP-файл после загрузки страницы, без JS, вот так.

Обратите внимание, что «фоновое изображение» на самом деле является файлом PHP. Файл PHP будет выполняться, когда он вызывается в нижней части тела, после файла html и всех элементов над ним.

Вы можете передавать данные в файл PHP с помощью GET в свойстве CSS ...

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

<div id="runPHP"></div> 
</body> 
</html> 
Смежные вопросы