0

ここで説明されているように、同様のスクリプトを使用しています:mysqlからのロングポーリング情報 が私のWebサイトで機能していませんが、その作業ですが、ページを更新するか別のリンクをクリックすると、エラーアラートが表示されます+ Webサイトが深刻に遅れ始めます。何が原因なのか教えてください。

私のコード:

$oldIDq = mysql_query("SELECT * FROM messages ORDER BY id DESC LIMIT 1");
while($oldrow = mysql_fetch_array($oldIDq)){
$oldID = $oldrow['id'];    
}

$func = '
var oldID = '.$oldID.';

function wait() {
$.ajax({
    type: "GET",
    url: "../scripts/msg_scripts/msg.php?oldid=" + oldID,
    async: true,
    cache: false,

    success: function (data){
     var json = eval(\'(\' + data + \')\');  

     if (json[\'msg_content\'] != "") {
      alert("new meassage added");   
     } 

     oldID = json[\'oldID\'];
     setTimeout(\'wait()\',1000);
    },

    error: function(XMLHttpRequest, textStatus, errorThrown){
      alert("error: " + textStatus + "(" + errorThrown + ")");  
      setTimeout(\'wait()\',15000);
    }

});
}

$(document).ready(function(){

    wait();
});
';

サーバ:

<?php 
    session_start();
    $connect = mysql_connect ("localhost", "root", "")

or die ("couldnt connect");
mysql_select_db ("***") or die ("not found"); //if db was   not found die
mysql_query("SET NAMES 'utf8'");

$oldID = $_GET['oldid']; 
$result = mysql_query("SELECT id FROM messages ORDER BY id DESC LIMIT 1");
while($row = mysql_fetch_array($result))
{
    $last_msg_id = $row['id']; 
}
while($last_msg_id <= $oldID)
{
    usleep(1000);
    clearstatcache();
    $result = mysql_query("SELECT id FROM messages ORDER BY id DESC LIMIT 1");
    while($row = mysql_fetch_array($result))
    {
        $last_msg_id = $row['id'];
    }
}
$response = array();
$response['msg'] = 'new';
$response['oldID'] = $last_msg_id;
echo json_encode($response);
?>
4

1 に答える 1

0

ここで $_GET['oldid'] に問題がある場合、別のリンクをクリックするか、それなしでページを更新すると、変数 $oldID が空になり、SQL が失敗します。そしてjs関数は、エラーが発生するたびに何も変更せずに自分自身を呼び出し続け、ajaxは呼び出し続けて失敗し続けます。その結果、無限ループが発生し、サイトがハングします.firebugでチェックすると、それが起こる.

それがあなたが意味することなら、それが助けになることを願っています

于 2012-09-11T12:20:56.503 に答える