0

为什么这段代码在单元测试中可以正常工作,但在页面中却不行?我有 Firebug 和 FirePHP,如果我对它进行硬编码,可以看到变量传递得很好,该操作在单元测试中传递一个 int 就好了,但是我尝试了 parseInt、Math.floor 和许多其他古怪的方法并且 statementCount 的值根本不会发布。阿贾克斯:

            //polling code
        var statementCount = 0; 

        (function poll(){
        setTimeout(function(){

        $.ajax({ url: "RROO_update.php", 
                type: "POST", 
                data: {'meetID': 2176, 'statementCount': statementCount}, 
                    success: function(data){

                        if(data.length > 0){

                            var statements = JSON.parse(data);

                            //reset the statement count
                            statementCount = statementCount + statements.length;

                            $(this).actplug_RROO('formatReturns', statements, userID);
                            poll();
                        }                                   

                     },         
                    error: function(){
                        poll();
                    }, 
                });
        }, 5000);
        })();

和PHP:

<?php
 include("../inc/variables.php");
 error_reporting (E_ALL ^ E_NOTICE);

 require_once('../FirePHPCore/FirePHP.class.php');
 require_once('../FirePHPCore/fb.php');
 $firephp = FirePHP::getInstance(true);
 ob_start();



 $MeetingID         = $_POST['meetID'];
 $StatementCount    = (int)$_POST['statementCount'];


 $firephp-> log($StatementCount, 'Statement count passed in' );

 $Finished = FALSE;

 while($Finished == FALSE){

     $MeetingStats = mysql_query("SELECT RROO_UPDATE.*, MEMBER.UserName, MEMBER.UserImage FROM RROO_UPDATE JOIN MEMBER ON RROO_UPDATE.MemberID = MEMBER.MemberID WHERE MeetingID = $MeetingID ORDER BY TimeStamp DESC", $DB_Connection);
     $MyNum = mysql_num_rows($MeetingStats);
     $firephp->log($MyNum, 'Row Query');


     if($MyNum > $StatementCount){

     $Returns = array();

        while($Return = mysql_fetch_array($MeetingStats)){      
            array_push($Returns, $Return);      
         } 

         $NewReturns = array();
         $NewStats = $MyNum - $StatementCount;

         $firephp->log($NewStats, 'heres the new stats count');

         for($i = 0; $i < $NewStats; $i++){

            array_push($NewReturns, $Returns[$i]);

         }
         $Here = count($NewReturns);
         $firephp->log($Here, 'The length of the new returns array');

         $Finished = TRUE;
         echo json_encode($NewReturns);

     }

     else{
        sleep(3);
     }

 }       

?>

就像我说的那样,它在单元测试中恢复正常,这在我可以看到的所有方面都是相同的(我实际上将它复制粘贴到页面中)唯一的区别是回发在页面上以不同的方式路由(到插件) 但我搞砸了回调无济于事。是否有某种原因 statementCount 不会重置并在此代码中发布?

4

1 回答 1

0

我不认为这statementCount是在回调内部定义的,仅在执行 ajax 调用的函数中定义。

是一个问题和答案,应该可以帮助您做您想做的事。

于 2013-03-12T07:19:49.040 回答