私はすでに同様の質問をここに投稿しましたが、私の問題を解決する応答を得ることができませんでした。また、問題が少し変わったので、私は再投稿し、助けを得るために必死です!
前の質問へのリンク:
現在のコード:
JS(私はphpから実行します):
$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){
if(data != \'1\'){
var json = eval(\'(\' + data + \')\');
if (json[\'msg_content\'] != "") {
alert("new meassage added");
}
oldID = json[\'oldID\'];
setTimeout(\'wait()\',1000); }
},
disconnect: function()
{
return false;
setTimeout(\'wait()\',1000);
},
error: function(XMLHttpRequest, textStatus, errorThrown){
alert("error: " + textStatus + "(" + errorThrown + ")");
setTimeout(\'wait()\',1000);
}
});
}
$(document).ready(function(){
wait();
});
';
サーバ:
$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'];
if($oldID == "") {
die('timeout');
}
else{
$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(10000);
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_content'] = 'new';
$response['oldID'] = $last_msg_id;
echo json_encode($response);
}
今、私はプロセスのサーバー側でセッションを実行していましたが、長いポーリングにはセッションに問題があることを理解したので、今のところそれを削除しました。セッションを削除したので、ajaxリクエストを送信するページでもセッションを実行しています。私の問題はある意味で改善されました。今起こっていることは、基本的に自分のWebサイトのリンクをクリックしてページを終了し、エラーが発生することですが、4〜5回以上実行すると、クリックごとにブラウザーがフリーズします。どのリンクでもajax関数を再実行すると、別のエラーが発生します。リクエストのページを更新すると、2番目のエラーが発生し、ブラウザがフリーズします。また、ブラウザを閉じてサイトの任意のページを再度開こうとすると、サーバーを再実行しない限り(現在ローカルホストで動作している)、chromeとffで試してみないと、まったく読み込まれません。
誰かが私に解決策を教えてもらえますか?