这段jquery ajax代码是否正确?

时间:2015-07-03 08:20:05

标签: javascript php jquery mysql ajax

我正在使用ajax,php,javascript和mysql制作一个简单的网络聊天应用程序。 我在这里尝试做的是避免在1秒的间隔后取出整个数据库(这通常在基本的聊天应用程序中完成),而是我想要获取并显示(通过附加)那些新输入的聊天任何用户都可以进入数据库。

要实现这一点,首先当用户第一次打开聊天屏幕时,整个数据库都会加载到聊天窗口中(此代码片段中未显示),然后我使用变量msgid来获取MSg_ID的最新值(这是我的聊天表中的自动增量主键)通过对'Msg.php'页面的ajax请求,返回所需的msg_id值。

现在使用msgid的这个值,并通过对“Chat3.php”页面的ajax请求,将它与数据库中每秒的Msg_ID的最大值进行比较。 如果Msg_ID的Max值已更改,则返回所需的行。在此之后,我使用相同的早期ajax请求更新'msgid'的值到页面'Msg.php'

页面Msg.php和Chat3.php工作正常,因为我已经对它们进行了彻底的测试。

我的问题是我的代码中存在什么问题,为什么不工作? 我们可以在ajax回调函数中使用ajax请求吗? 还有什么可能是错误的来源? 任何输入都是有价值的:) 如果您在理解代码时遇到任何问题,请发表评论。 '#yyy'和'#zzz'是随机div元素,我用它来测试ajax回调函数的数据值。

如果它有帮助,我甚至可以发布其余的代码。

 <script type"text/javascript">
         $(document).ready(function() {
        var dept = '<?php echo $deptId; ?>';

        $.ajax({
                url: 'scripts/php/Msg.php',
                data: {dept:dept},
                success: function(data) {
                    $('#yyy').html(data);//this displays the correct value
                var msgid=data;
            }
        });

        var interval = setInterval(function() { 
        $.ajax({
                url: 'scripts/php/Chat3.php',
                data: {dept:dept,msgid:msgid},
                success: function(data) {   
                    if(data!='bad'){    
                        //$('#messages').prepend(data);
                        $('#zzz').html(data);//does not display any value although Chat3.php is returning the correct value.
                        //below ajax request to update the value of msgid
                        $.ajax({
                        url: 'scripts/php/Msg.php',
                        data: {dept:dept},
                        success: function(data) {
                        var msgid=data;
                        $('#zzz').html(data);   //not displaying anything although above one is was displaying
                        }
                        });
                    }   
                }   
        });

    }, 1000);
     });
     </script>

这是我的Msg.php

  <?php
  require '../../includes/database/connect.db.php';
  function get_msg($dept){

    $query= "SELECT Msg_ID,Sender, Message ,Time_stamp FROM chat WHERE Dept_ID='$dept' ORDER BY Msg_ID DESC" ;
    $run=mysql_query($query);

    $messages =array();
    while($message=mysql_fetch_assoc($run)){
        $messages[] =array('msgid'=>$message['Msg_ID'],
                        'sender'=>$message['Sender'],
                           'message'=>$message['Message'],
                       'time_stamp'=>$message['Time_stamp']);
    }
    return $messages;
 }
 $dept=$_GET['dept'];
 $messages = get_msg($dept);

  $x=count($messages);
 if($x){
            foreach($messages as $message) {
              if($x==count($messages)){
                echo $message['msgid'];
            }
        $x--;
     }
  }     
 ?>

这是我的Chat3.php

<?php
     require '../../includes/database/connect.db.php';
     function get_msg($dept,$msgid){
     $query1= "SELECT MAX(Msg_ID) as msg_id FROM chat" ;
     $run1=mysql_query($query1);
     $row = mysql_fetch_assoc($run1);
      $result =$row['msg_id'];

      $messages =array();
      if($result>$msgid)
      {
      $query= "SELECT Sender, Message ,Time_stamp FROM chat WHERE Dept_ID='$dept' AND Msg_ID>'$msgid' ORDER BY Msg_ID DESC" ;
      $run=mysql_query($query);

      while($message=mysql_fetch_assoc($run)){
        $messages[] =array('sender'=>$message['Sender'],
                           'message'=>$message['Message'],
                         'time_stamp'=>$message['Time_stamp']);
      }
      return $messages;
     }
     else
     {
       return $messages;
     }
   }

  $dept=$_GET['dept'];
  $msgid=$_GET['msgid'];
   $messages = get_msg($dept,$msgid);

   if(count($messages)){
        foreach($messages as $message) {
            echo '<strong>'.$message['sender'].' Sent</strong><br>';
            echo $message['message'].' <i><small><div       align="right">'.$message['time_stamp'].'</i></small></div>';
        }

  }     
  else {
  echo 'bad';
  }
?>

1 个答案:

答案 0 :(得分:2)

问题是msgid

在您的第一个AJAX请求中,您要设置本地范围内的变量var msgid=data;

我认为您在发送数据时尝试在第二个AJAX请求中访问该变量

url: 'scripts/php/Chat3.php',
data: {dept:dept,msgid:msgid}, // Trying to access the local variable of previous ajax request

修改

尝试从第一个var请求中删除var msgid=data;中的AJAX。删除var将使变量GLOBAL,虽然它不利于污染全局范围,但你肯定可以暂时尝试这个