2012-09-11 5 views
0

내 웹 사이트에서 long-polling info from mysql not working 과 비슷한 스크립트를 사용하고 있습니다. 해당 웹 페이지에서 페이지를 새로 고침하거나 다른 링크를 클릭하면 오류 경고가 표시되고 + 웹 사이트가 심각하게 지연되기 시작합니다. 어떤 사람이 원인이 무엇인지 말해 줄 수 있습니까?ajax long polling with mysql

내 코드 :

$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(); 
}); 
'; 

서버 : 여기에 $ _GET에서의

<?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); 
?> 
+0

@ moonwave99 - 나는 동의한다. –

+0

aaaargh! 도움! eval === evil은 JSON.parse (jsonString) instaid를 사용합니다! 그리고 당신은 파싱이 필요조차하지 않습니다! jquery는'dataType : 'json'' 매개 변수를 추가하면 당신을 위해 그것을 할 수 있습니다! – VDP

+0

당신이 그것을 시도합니다 감사합니다 :) – durian

답변

0

proplem [ 'oldid'] 다른 링크를 클릭하거나 변수 $ oldID없이 페이지를 새로 고침 할 때 비어있을 것이고 SQL은 실패 할 것이다. 그리고 js 함수는 오류가 발생할 때마다 아무것도 변경되지 않고 계속 호출하고 계속 호출합니다. 아약스는 계속 전화를 걸어 계속 전화를 걸고 무한 루프가 발생하여 사이트를 멈추게하고 방화범이 끌리는 지 확인합니다. .

도움이 되었으면 좋겠다.

+0

그리고 내가 이것을 해결할 수 있습니까? – durian

+1

당신은 oldid가 null 인 경우 null이 -1 을 반환하고 js가 응답 = -1이면 wait() 호출을 취소 할 수 있는지 확인할 수 있습니다. – AboQutiesh

+0

그래서 서버 측에서 $ oldID = $ _GET [ 'oldid']; if ($ oldID == "") {$ oldID == -1}? 그리고 js? – durian

관련 문제