Это настоящий длинный опрос?

После многих испытаний я успешно поддерживаю непрерывное подключение к серверу с базой данных. Теперь код keet cheking и покажет сообщения, если в базе данных есть новые.

Plz просмотрите и скажите , есть ли истинный метод длинных опросов, используемый в этом коде? Если это не так, то plz подскажут, где я ошибаюсь (отклоняясь от длинного опроса) и как это может быть сделано длительным опросом.

Currenlty, я получаю эти ошибки. Тем не менее он поддерживает непрерывную связь с базой данных.

  1. каждый раз только одно сообщение вытягивается вместо всех. (Я использовал цикл .each, но он останавливает длительный опрос)
  2. Через каждые 10/15 секунд токены error apperes ( Parse erroe (синтаксическая ошибка = неожиданный токен) ).

    var last_msg_id = 2; function load_msgs() { $.ajax({ type:"Post", url:"getdata.php", data:{ last_msg_id:last_msg_id }, dataType:"json", async:true, cache:false, success:function(data) { var json = data; $("#commidwin").append(json['msg']); last_msg_id = json["last_msg_id_db"]; setTimeout("load_msgs()", 1000); }, error:function(XMLhttprequest, textstatus, errorthrown) { alert("error:" + textstatus + "(" + errorthrown + ")"); setTimeout("load_msgs()", 15000); } }); } 

Файл Php находится здесь

      $last_msg_id=$_POST['last_msg_id']; $last_msg_id_db=1; while($last_msg_id>$last_msg_id_db){ usleep(10000); clearstatcache(); $sql=mysqli_query($db3->connection,"SELECT * FROM chat_com where id>'$last_msg_id' ORDER by id ASC"); $sql_m=mysqli_query($db3->connection,"SELECT max(id) as maxid FROM chat_com"); $row_m=mysqli_fetch_array($sql_m); $last_msg_id_db=$row_m['maxid']; while($row=mysqli_fetch_array($sql)){ $textt=$row['mesg']; $last_msg_id_db=$last_msg_id_db; $response=array(); $response['msg']=$textt; $response['last_msg_id_db']=$last_msg_id_db; } } echo json_encode($response); в  $last_msg_id=$_POST['last_msg_id']; $last_msg_id_db=1; while($last_msg_id>$last_msg_id_db){ usleep(10000); clearstatcache(); $sql=mysqli_query($db3->connection,"SELECT * FROM chat_com where id>'$last_msg_id' ORDER by id ASC"); $sql_m=mysqli_query($db3->connection,"SELECT max(id) as maxid FROM chat_com"); $row_m=mysqli_fetch_array($sql_m); $last_msg_id_db=$row_m['maxid']; while($row=mysqli_fetch_array($sql)){ $textt=$row['mesg']; $last_msg_id_db=$last_msg_id_db; $response=array(); $response['msg']=$textt; $response['last_msg_id_db']=$last_msg_id_db; } } echo json_encode($response); в  $last_msg_id=$_POST['last_msg_id']; $last_msg_id_db=1; while($last_msg_id>$last_msg_id_db){ usleep(10000); clearstatcache(); $sql=mysqli_query($db3->connection,"SELECT * FROM chat_com where id>'$last_msg_id' ORDER by id ASC"); $sql_m=mysqli_query($db3->connection,"SELECT max(id) as maxid FROM chat_com"); $row_m=mysqli_fetch_array($sql_m); $last_msg_id_db=$row_m['maxid']; while($row=mysqli_fetch_array($sql)){ $textt=$row['mesg']; $last_msg_id_db=$last_msg_id_db; $response=array(); $response['msg']=$textt; $response['last_msg_id_db']=$last_msg_id_db; } } echo json_encode($response); 

    Related of "Это настоящий длинный опрос?"

    Опрос немного сложнее, чем просто: просто потому, что в целом все вещи, которые вы выводите в браузер, будут интерпретироваться по завершении. Ваш пример совершенно ясен:

     success:function(data) { var json = data; $("#commidwin").append(json['msg']); last_msg_id = json["last_msg_id_db"]; setTimeout("load_msgs()", 1000); }, 

    jQuery будет ждать завершения ответа, чтобы построить вашу переменную data а затем вызовет ваш обратный вызов.

    Одним из способов создания долгого опроса является задача и последователь:

    • задача – это «бесконечный» цикл, он ничего не отображает, а просто захватывает и запускает события, помещает «ящик».

    • последователь – это ajax-вызов, сделанный каждые X секунд, он просматривает «поле», заполненное заданием, и немедленно действует внутри страницы.

    Вот пример долгого опроса, нет последователя, просто событие (релиз), которое останавливает опрос, но вы получите идею:

     <?php // For this demo if (file_exists('poll.txt') == false) { file_put_contents('poll.txt', ''); } // If this variable is set, a long-polling is starting... if (isset($_GET['poll'])) { // Don't forget to change the default time limit set_time_limit(120); date_default_timezone_set('Europe/Paris'); $time = time(); // We loop until you click on the "release" button... $poll = true; $number_of_tries = 1; while ($poll) { // Here we simulate a request (last mtime of file could be a creation/update_date field on a base) clearstatcache(); $mtime = filemtime('poll.txt'); if ($mtime > $time) { $result = htmlentities(file_get_contents('poll.txt')); $poll = false; } // Of course, else your polling will kill your resources! $number_of_tries++; sleep(1); } // Outputs result echo "Number of tries : {$number_of_tries}<br/>{$result}"; die(); } // Here we catch the release form if (isset($_GET['release'])) { $data = ''; if (isset($_GET['data'])) { $data = $_GET['data']; } file_put_contents('poll.txt', $data); die(); } ?> <!-- click this button to begin long-polling --> <input id="poll" type="button" value="Click me to start polling" /> <br/><br/> Give me some text here : <br/> <input id="data" type="text" /> <br/> <!-- click this button to release long-polling --> <input id="release" type="button" value="Click me to release polling" disabled="disabled" /> <br/><br/> Result after releasing polling : <div id="result"></div> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script type="text/javascript"> // Script to launch polling $('#poll').click(function() { $('#poll').attr('disabled', 'disabled'); $('#release').removeAttr('disabled'); $.ajax({ url: 'poll.php', data: { poll: 'yes' // sets our $_GET['poll'] }, success: function(data) { $('#result').html(data); $('#poll').removeAttr('disabled'); $('#release').attr('disabled', 'disabled'); } }); }); // Script to release polling $('#release').click(function() { $.ajax({ url: 'poll.php', data: { release: 'yes', // sets our $_GET['release'] data: $('#data').val() // sets our $_GET['data'] } }); }); </script> 

    Демонстрация: здесь .