2015-07-03 2 views
2

Я делаю простое приложение для веб-чата, используя ajax, php, javascript и mysql. То, что я пытаюсь сделать здесь, состоит в том, чтобы избежать выборки всей базы данных через интервал в 1 секунду (что обычно делается в основном приложении чата), но я хочу, чтобы вытащить и отобразить (добавив) также те чаты, которые были недавно введенных в базу данных любым пользователем.Правильно ли это код jquery ajax?

Чтобы реализовать это: сначала, когда пользователь сначала открывает экран чата, вся база данных загружается в окне чата (не показано в этом фрагменте кода), а затем я использую переменную msgid для получения последнего значения MSg_ID (который является первичным ключом автоматического увеличения в моей таблице чата) через запрос ajax на страницу «Msg.php», которая возвращает требуемое значение msg_id.

Теперь, используя это значение msgid и сравнивая его с максимальным значением Msg_ID каждую секунду в базе данных через запрос ajax на страницу «Chat3.php». Если изменилось значение Max Msg_ID, возвращаются требуемые строки. После этого я обновляю значение «msgid», используя тот же самый предыдущий запрос ajax на страницу «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'; 
    } 
?> 
+0

IF Msg.php и Chat3.php работают отлично, какие другие ошибки, которые вы получаете? – Abhinav

+0

Ошибка генерируется, это просто отображение элемента данных в функции обратного вызова, как если бы он не получил его или что-то еще, и я полностью проверил My Msg.php и Chat3.php –

+0

Только для уведомления тип запроса ajax, который вы создаете, является типом GET, поскольку ничего больше не объявлено, поэтому, если вы получаете данные для публикации, вам нужно установить тип: «POST» в объекте. – Djip

ответ

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 

EDIT:

Попробуйте удалить var из var msgid=data; в первом AJAX запросе. Удаление var сделает переменную GLOBAL, хотя ее не хорошо загрязнять глобальную область, но вы можете определенно попробовать это на данный момент

+0

Yep, который сделал трюк :) Я не знал, что javascript также имеет локальную область видимости, например, C++ и другие языки. –

+0

'JS' имеют области видимости :) – Abhinav

Смежные вопросы