【问题标题】:Is this piece of jquery ajax code correct?这段 jquery ajax 代码正确吗?
【发布时间】:2015-09-21 00:12:07
【问题描述】:

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

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

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

Msg.php 和 Chat3.php 页面运行良好,因为我已经对它们进行了彻底的测试。

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

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

 <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';
  }
?>

【问题讨论】:

  • 如果 Msg.php 和 Chat3.php 工作正常,您收到的其他错误是什么?
  • 没有产生错误,只是在回调函数中显示'data'元素,好像它没有收到它什么的,我已经完全检查了我的Msg.php和Chat3 .php
  • 请注意,您发出的 ajax 请求的类型是 GET 类型,因为没有声明任何其他内容,因此如果您要获取发布数据,则必须设置 type: ' POST' 在对象中。
  • 我只使用获取数据
  • 这个 javascript 是由 PHP 脚本生成然后回显到浏览器的吗?

标签: javascript php jquery mysql ajax


【解决方案1】:

问题是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

编辑:

尝试在您的第一个 AJAX 请求中从 var msgid=data; 中删除 var。去掉var会变成变量GLOBAL,虽然不利于污染全局作用域,但是你暂时可以试试这个

【讨论】:

  • 是的,成功了 :) 我不知道 javascript 也像 c++ 和其他语言一样具有局部性
  • JS 确实有作用域 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2013-03-06
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
  • 2011-06-10
  • 2011-08-02
相关资源
最近更新 更多