3

サーバーから情報を要求するように ajax を取得しようとしています。また、最後の呼び出し以降に挿入された場合は、休憩して再起動し、新しい streamitem_id を取得して渡す前に、少なくとも 1 分間それを維持しようとしています。

現在、非常に高速に実行され、一度だけ実行されますが、その理由はわかりません。

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);
}}}
4

2 に答える 2

0

setTimeout は期待どおりに機能しません。ajax-request は、あなたが望むように「生き続ける」ことはできません。リクエストが送信され、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 秒ごとに起動します。速度は自分で編集できますが、短期間に要求が多すぎると、サーバーがクラッシュしたり遅くなったりする可能性があることに注意してください。

于 2012-09-16T12:29:14.573 に答える
0

sleepPHP スクリプトでは、接続を維持するために関数を使用する必要があります。

何かのようなもの:

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ステートメントを使用してエントリが追加されるのを待つことができます.

于 2012-09-16T12:30:03.943 に答える