2012-09-16 133 views
2

我試圖讓我的ajax從服務器請求信息,並且在休息並重新啓動並獲取並傳遞新的streamitem_id之前至少保持它活動至少1分鐘,如果它們是自從最後一次通話。保持Ajax存活

目前運行速度非常快,只有一次,我不明白爲什麼。

AJAX

<script type="text/javascript" charset="utf-8"> 

function wait() { 
    var streamitem_id =<? echo $streamitem_catch['streamitem_id']; ?>; 
    $.ajax({ 
     type: "POST", 
     url: "testingajaxfeed.php?streamitem_id=" + streamitem_id, 
     async: true, 
     cache: false,, 
     dataType: "json", 
     data: {streamitem_id: streamitem_id}, 
     success: function (response) { 
     setTimeout("wait()",1000); 
      $("#homestatusid").prepend("MY INSERTED RESPONSE"); 
     }, 
    }); 
} 
$(document).ready(function(){ 
wait(); 
}); 
</script> 

PHP像你期望

if (isset($_POST['streamitem_id'])) { 
$lastID = (int)$_POST['streamitem_id']; 

if(empty($lastID)) { 
die('timeout'); 
} 
else { 
$following_string = $_SESSION['id']; 
$result="SELECT d.*, c.*, u.* 
    FROM streamdata   AS d 
    JOIN streamdata_comments AS c ON d.streamitem_id = c.comment_streamitem 
    JOIN users    AS u ON u.id = c.comment_poster 
WHERE d.streamitem_id > '$lastID' 
    AND c.comment_poster = '$following_string' 
    AND (d.streamitem_creator = '$following_string') 
    OR d.streamitem_creator IN $friendlist 
    AND d.streamitem_type_id NOT IN ('3') 
    ORDER BY '$lastID' DESC LIMIT 1"; 
$result = mysqli_query($mysqli, $result) or die(mysqli_error($mysqli)); 

while ($resultArr = mysqli_fetch_array($result)) { 
$json = array(); 
    $json['streamitem_id'] = $resultArr['streamitem_id']; 
    $json['streamitem_content'] = $resultArr['streamitem_content']; 
    $json['streamitem_timestamp'] = Agotime($resultArr['streamitem_timestamp']); 
    $json['comment_id'] = $resultArr['comment_id']; 
    $json['comment_content'] = $resultArr['comment_content']; 
    $json['comment_poster'] = $resultArr['comment_poster']; 
    $json['comment_datetime'] = Agotime($resultArr['comment_datetime']); 
    $json['comment_streamitem'] = $resultArr['comment_streamitem']; 
    $json['username'] = $resultArr['username']; 
    $json['id'] = $resultArr['id']; 
    $json['first'] = $resultArr['first']; 
    $json['middle'] = $resultArr['middle']; 
    $json['last'] = $resultArr['last']; 
echo json_encode($json); 
}}} 
+0

爲什麼你通過GET和POST發送id?並且擺脫'cache:false ,,中的第二個逗號。並且不要作爲字符串傳遞,而是傳遞給'setTimeout()'的函數:'setTimeout(wait,1000)' – ThiefMaster

+0

用相同的問題糾正了愚蠢的錯誤。我不知道它是我的ajax還是我的PHP JSON。 – dave

回答

0

的setTimeout不起作用。 ajax請求不能像你想要的那樣「保持活着」。請求被髮送,PHP腳本返回內容,並且ajax腳本得到結果。所有這些都在1-2秒內發生。

如果這是用於某種類型的流(看起來像),您將不得不讓這個函數在一個小的時間間隔內重複一遍又一遍。

我已經改變了你這樣的代碼:

<script type="text/javascript" charset="utf-8"> 

function wait() { 
    var streamitem_id =<? echo $streamitem_catch['streamitem_id']; ?>; 
    $.ajax({ 
     type: "POST", 
     url: "testingajaxfeed.php?streamitem_id=" + streamitem_id, 
     async: true, 
     cache: false, 
     dataType: "json", 
     data: {streamitem_id: streamitem_id}, 
     success: function (response) { 
      $("#homestatusid").prepend("MY INSERTED RESPONSE"); 
     }, 
    }); 
} 
$(document).ready(function(){ 
setInterval(wait,10000); 
}); 
</script> 

了AJAX腳本將每10秒觸發。您可以自己編輯速度,但請記住,在短時間內請求太多會導致服務器崩潰/變慢。

+0

這是不正確的,只要需要PHP腳本關閉連接,ajax調用就會持續,只要您想使用PHP –

+0

就可以很容易地人工保持連接打開。你可以做到這一點,但這意味着它沒有返回到js腳本的內容,並且這樣一來,流上的更新頻率就會消失。 – OptimusCrime

+1

咦?看看我的迴應,它會以高達50ms的延遲(不包括成本和網絡時間)爲內容迴應JavaScript。這會吸收與檢查每10秒? –

0

在您的PHP腳本中,您需要使用sleep函數來保持連接的正常運行。

喜歡的東西:

function callScript(callback) { 
    $.post('myscript.php',{data:data},function(data) { 
     if (data == -1) { 
      return callScript(callback); 
     } 
     return callback(data); 
    } 
} 

myscript.php

$interval = 50; 
$iters = floor(1000/$interval); 
while($conditional === false) { 
    if (--$iters < 1) { die(-1); } 
    sleep($interval); 
} 
echo $json; 

雖然這不正是你所需要的,它可以很容易地適應你的需要。我已經用其他東西做了這件事,雖然代價高昂,但你可以使用sql語句等待條目添加等。

+0

他們的任何可能性,你可以intergraate上面到我的代碼請我。我一直試圖讓這個工作一個多星期。它真的讓我煩惱。 – dave