2011-05-22 71 views
0

好的,就在这里。在php while循环中运行jquery

我有一个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; 
?> 
+1

显示一些代码,没有人喜欢猜测答案 – Ibu 2011-05-22 22:10:53

+0

是显示一些爱 – dynamic 2011-05-22 22:13:58

+0

添加的代码到帖子 – Bigandrewgold 2011-05-22 22:29:01

回答

2

你可以做的是使用会话变量来记录用户完成操作的次数。

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

然后在HTML中输出该变量。

+0

即时通讯没有试图显示用户完成一个操作多少次我试图让用户看到多少次循环已经实时运行,我更新了我的帖子以澄清这个 – Bigandrewgold 2011-05-22 22:44:47

0

你想要做什么是不可能的(当然,不是你想象的那样)。

如果我不得不这样做,因为绝对的要求(即使它发臭的设计不好)我会做它像这样:

无论你的号码是在原有的输出文件,将它包装在一个div或跨度并给它一个唯一的ID。

然后我会为你的循环计数器使用一个会话变量。

最后,我会用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']++; 
    } 
?> 

保存这三个文件,你就会得到你想要的结果。

+0

那么我会在哪里放第二块编码(计时器) – Bigandrewgold 2011-05-23 20:12:53

+0

想更多地了解这一点,你应该在一个单独的文件中做你的循环,因为PHP会缓冲你的输出,直到循环完成。因此,将循环代码移至第二个php文件,并从前端执行类似的ajax调用。这两个函数都应该在你的jQuery $(document).ready()函数中。 – gnxtech3 2011-05-23 20:37:15

+0

$(document).ready()函数在哪里。我把所有的代码都下载并上传了,它现在还不行。它将显示0,但是当我提交文件时,它不更新数字,当它完成时它会进入白色屏幕,当我按下后退箭头或回到页面时,它显示正确的数字。我应该如何处理提交按钮 – Bigandrewgold 2011-05-23 21:51:16

0

我修改了代码,以便它可以使用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> 

和过程的代码。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.'"}'; 
?> 

我们存储在会话的数量,并与response.number增加它的每一个动作(process.php的调用) 和更新款的id =“结果”

希望帮助

+0

我将如何使ajax函数调用process.php计数次数? – Bigandrewgold 2011-05-23 19:27:28

+0

看到我下面的评论。 – gnxtech3 2011-05-23 19:35:37

+0

好的,所以我一直在玩这个代码,并使用它,我需要一个循环周围的Ajax的东西,但是当我添加一个,每当我按提交整个浏览器得到令人难以置信的滞后,任何方式来缓解这一点? – Bigandrewgold 2011-05-24 05:52:54