2016-05-18 1 views
0

немного вопрос выше здесь.PHP и AJAX: Echo во время процесса

У меня есть функция PHP, которая вызывается с помощью AJAX и выглядит следующим образом:

function processActiveDirectory(){ 
    $var = new GetLDAPUsers; 

    echo "Getting Users from Active Directory.... <br />";   

    $adusers = $var->getAllUsers(); 
    echo "setting up images.... <br />"; 
    // processing more stuff 
    echo "finished"; 
} 

Я пытаюсь получить «Live-журнал» эхо. Значение перед каждым шагом эхо должно выводиться в область журнала, один шаг за другим. Поэтому пользователь знает, что происходит.

Но проблема в том, что журнал не появляется во время процесса, он просто заполняется во всем тексте в конце процесса. Все остальное отлично работает. Журнал просто не отображается во время выполнения, но после завершения функции он отображается в правильном положении.

Мой AJAX вызов:

jQuery(document).ready(function($) { 
    $('#lii-form').submit(function() { 
     data = { 
      action: 'lii_map_images' 
     }; 

     $.post(ajaxurl, data, function(response){ 
      $('#lii_log').html(response); 
     }); 
     return false; 
    }); 
}); 

Вот как это сборка:

Ajax and PHP File

Редактировать

Другие, чем в этом thread я уже использую вызов AJAX , чтобы вызвать функцию. Это в вызываемой функции, что я гулкий материал ...

Edit 2

Я использую WordPress

К сожалению, я не могу предложить больше информации, из-за корпоративных restrictments.

+1

Это кросс-домен? – Raptor

+0

все в одном домене – Zanidd

+2

Возможный дубликат [Показать прогресс для длинного скрипта PHP] (http://stackoverflow.com/questions/7049303/show-progress-for-php-long-script) – Thamilan

ответ

2

Это короткий пересмотр по вашему желанию. Пожалуйста, развивайтесь дальше с этой идеей.

Это использует два AJAX призвание - один для основного процесса и других для достижения прогресса:

Сценарий:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script type="text/javascript"> 
    //Start the main process 
    $.ajax({ 
     url: 'main.php', 
     success: function(data) { 
     } 
    }); 

    function getProgress(){ 
     $.ajax({ 
      url: 'progress.php', 
      success: function(data) { 
       $("#progress").html(data); 
       if(data != "finished"){ 
        getProgress(); 
       } 
      } 
     }); 
    } 

    //Start the progress section 
    getProgress(); 
</script> 
<div id="progress"></div> 

main.php

<?php 
$arr = ['Getting Users from Active Directory....','setting up images....','finished']; 
foreach($arr as $value) { 
    session_start(); 
    $_SESSION["progress"]=$value; 
    session_write_close(); 
    sleep(1); 
} 

прогресс. php

<?php 
session_start(); 
sleep(1); 
echo $_SESSION["progress"]; 

Так что ваш processActiveDirectory придет под Main.php и эхо должна быть заменен SESSION переменной

+0

вот так? $ adusers = $ var-> getAllUsers(); $ _SESSION ["progress"] = "настройка изображений ....
"; – Zanidd

+1

@ Zanidd Да, не забудьте начать и написать закрытие сессии для каждого обновления прогресса, только тогда оно будет обнаружено. (Я пытаюсь найти альтернативу для многократного запуска и закрытия) – Thamilan

+0

ok Я попробую это – Zanidd

0

Я думаю, что нет никакой необходимости в таких вещах, как процесс LOG с помощью AJAX. AJAX - слишком тяжелая вещь, и это может быть плохой дизайн, если вы этого хотите. Лучше использовать сетевые сокеты или вообще не использовать

 Смежные вопросы

  • Нет связанных вопросов^_^