Запуск jquery в цикле php while - PullRequest
0 голосов
/ 23 мая 2011

Хорошо, так что вот оно.

У меня есть страница index.php. Он либо создает HTML-страницу, либо запускает цикл while.

Он будет запускать цикл только после того, как вы введете некоторую информацию и нажмете кнопку отправки на html-странице. Теперь на html-странице внизу у меня написано «__ действия завершены», а пробел является переменной, к которой добавляется 1 при каждом запуске цикла.

Теперь я хочу, чтобы число обновлялось при каждом запуске цикла. Мне также сказали нам ajax / jquery, чтобы сделать это, но я был не в состоянии понять это.

Так что же я могу поместить в цикл while, чтобы обновить переменную?

<?php
$number = $_POST['number'];
if(isset($number)){}
else{
    $number = 0;
}
if(isset($_POST['Submit'])){
    $MN = $_POST['MN'];
    $count = $_POST['count'];
    $provider = $_POST['provider'];
    for ($i = 0; $i < $count; $i++) {
        $m = rand(10e16, 10e20);
        $n = base_convert(¤m, 10, 36);
        $subject = $m;
        $body =  $n;
        $number = $number + 1;
    }
}
echo <<<END
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html> 
  <body>
    <form action="$PHP_SELF" method="post">
    <center> <p>
    <label><b><big><big><big><big><big><big><big>Page</big></big></big></big></big></big></big></b></label>
    </p>
    <p>
    <p>
    <label><strong><u>MN</u></label>
    </p>
    <input name="MN" type="text" value=""/>
    </p>
    <p>
    <p>
    <label><strong><u>Number to Send</u></label>
    </p>
   <input name="count" type="text" value = "1"/>
     <input name = "number" type = "hidden" value = "$number"/>
    </p>
    <p>
    <p>
    <label><strong><u>Provider</u></label>
    </p>
    <select name="provider">
        <option value="">Choose One...</option>
    </select>
    </p>
    <p>
    <input name = "Submit" type = "submit" value = "Send"></a>
    </p>
    <p>You have done {$number} actions</p>
    </center>
    </body></html>

    </style>
    </head>
    <style type="text/css">
    <!--
    body {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 12px;
        font-style: normal;
        line-height: normal;
        color: #FF0000;
        background-color: #000000;
    }
    .style7 {color: #FF0000}
END;
?>

Ответы [ 3 ]

2 голосов
/ 23 мая 2011

Что вы можете сделать, это использовать переменную сеанса, чтобы записать, сколько раз пользователь выполнил действие.

if (!$_SESSION["times"]) $_SESSION["times"] = 0;
else $_SESSION["times"]++

Затем в HTML выведите эту переменную.

0 голосов
/ 23 мая 2011

я изменил ваш код, чтобы он мог использовать jquery ajax для отправки формы ответ является строкой json, мы анализируем ее с помощью jquery, чтобы получить объект javascript это код вашей формы:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html> 
    <head>
     <style type="text/css">
        body {
            font-family: Arial, Helvetica, sans-serif;
            font-size: 12px;
            font-style: normal;
            line-height: normal;
            color: #FF0000;
            background-color: #000000;
        }
       .style7 {color: #FF0000}
    </style>
    <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
    <script type="text/javascript">
        $(function(){
            $("#Submit").click(function(){
                $.ajax({
                    url:"process.php",
                    type:"get",
                    data:$("form").serialize(),
                    success:function(response){
                        var obj = jQuery.parseJSON( response );
                        var success = obj.success;
                        var actionsNumber = obj.number;
                        $("#result").html('You have done  '+actionsNumber+'  actions');                     
                    }
                })
            })
        })
    </script>
    </head>
  <body>
    <form action="" method="post">
    <center> <p>
    <label><b><big><big><big><big><big><big><big>Page</big></big></big></big></big></big></big></b></label>
    </p>
    <p>
    <p>
    <label><strong><u>MN</u></label>
    </p>
    <input name="MN" type="text" value=""/>
    </p>
    <p>
    <p>
    <label><strong><u>Number to Send</u></label>
    </p>
   <input name="count" type="text" value = "1"/>
     <input name = "number" type = "hidden" value = "$number"/>
    </p>
    <p>
    <p>
    <label><strong><u>Provider</u></label>
    </p>
    <select name="provider">
        <option value="">Choose One...</option>
    </select>
    </p>
    <p>
    <input id="Submit" type = "button" value = "Send">
    </p>
    <p id="result"></p>
    </center>
    </body></html>

и код process.php:

<?php session_start();
// process your form data as you do 
//:::::::::
//
if(!isset($_SESSION['number'])){
      $_SESSION['number'] = 0;
    }
$number =  $_SESSION['number']++;

// output json response 
echo'{"success":"true","number":"'.$number.'"}';
?> 

мы храним номер в сеансе и увеличиваем его при каждом действии (вызов process.php) и обновите абзац id = "result" с помощью response.number

надеюсь, что помощь

0 голосов
/ 23 мая 2011

То, что вы хотите сделать, невозможно (ну, не так, как вы думаете).

Если бы мне пришлось сделать это как абсолютное требование (даже если оно воняет плохим дизайном), я бы сделал это так:

Где бы ни находился ваш номер в исходном выходном файле, оберните его в div или span и присвойте ему уникальный идентификатор.

Я бы тогда использовал переменную сеанса для вашего счетчика цикла.

Наконец, я бы использовал jQuery с плагином таймеров для отключения с интервалом в 1 или 2 секунды. Внутри таймера вы должны вызвать файл .php в фоновом режиме, который просто возвращает значение переменной сеанса.

Вот немного кода для демонстрации:

(отредактировано для уточнения на основе комментариев ниже)

Вот рабочий пример:

<?php
    // main_page.php

    session_start();
    $_SESSION['loop_count'] = 0;
?>
<html>
    <head>
        <title>Background Updating Example</title>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
        <script type="text/javascript" src="PATH_TO_YOUR_SCRIPTS/timers.jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $.ajax({
                    url: 'exec_loop.php',
                    success: function(data) {
                        $('#status_message').html("Loop started...");
                    }
                });

                 $(document).everyTime(1000, function() {
                     $.ajax({
                         url: 'get_counter.php',
                         success: function(data) {
                             $('#counter_text').html(data);
                         }
                     });
                 });

            });
        </script>
    </head>
    <body>
        The loop has executed <span id='counter_text'>0</span> times.
    </body>
</html>

Затем в файле get_counter.php просто сделайте что-то вроде этого:

<?php
    // get_counter.php
    session_start();
    echo $_SESSION['loop_count'];
?>

Теперь для файла цикла

<?php
    // exec_loop.php

    session_start();
    for ($i = 0; $i < 50000000; $i++) {
        $_SESSION['loop_count']++;
    }
?>

Сохраните эти три файла, и вы получите желаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...