0

divaをidx 秒ごとに更新するにはどうすればよいですか? この中に含まれるユーザーのステータスを更新したいと思います。これには、その個々の投稿に対するコメントの量が含まれます。

試してみましsetIntervalたが、ステータスが追加されるまでに10秒かかり、その後x秒ごとにステータスが複製されます。必要なのは、10 秒ごとにコメントを追加し直すのではなく、応答データを更新することだけです。

HTML:

<div id='divider-"+response['streamitem_id']+'></div>

JavaScript:

$(document).ready(function(){
    $("form#myform").submit(function(event) {
        event.preventDefault();
        var content = $("#toid").val();
        var newmsg = $("#newmsg").val();

        $.ajax({
            type: "POST",
            url: "insert.php",
            cache: false,
            dataType: "json",
            data: { toid: content, newmsg: newmsg },
            success: function(response){ 
                $("#homestatusid").html("<div id='divider-"+response['streamitem_id']+"'><div class='userinfo'><a href='/profile.php?username="+response['username']+"'><img class='stream_profileimage' style='border:none;padding:0px;display:inline;' border=\"0\" src=\"imgs/cropped"+response['id']+".jpg\" onerror='this.src=\"img/no_profile_img.jpeg\"' width=\"40\" height=\"40\" ></a><div style='cursor:pointer;position:relative;top:0px;float:right;padding-right:5px;' onclick=\"delete_('"+response['streamitem_id']+"');\">X</div><a href='/profile.php?username="+response['username']+"'>"+response['first']+" "+ response['middle']+" "+response['last']+"</a><span class='subtleLink'> said</span><br/><a class='subtleLink' style='font-weight:normal;'>"+response['streamitem_timestamp']+"</a><hr>"+newmsg+"<div style='height:20px;' class='post_contextoptions'><div id='streamcomment'><a style='cursor:pointer;' id='commenttoggle_"+response['streamitem_id']+"' onclick=\"toggle_comments('comment_holder_"+response['streamitem_id']+"');clearTimeout(streamloop);swapcommentlabel(this.id);\">Write a comment...</a></div><div id='streamlike'><a id='likecontext_"+response['streamitem_id']+"' style='cursor:pointer;' onClick=\"likestatus("+response['streamitem_id']+",this.id);\"><div style='width:50px;' id='likesprint"+response['streamitem_id']+"'>Like</div></a><div style='width:50px;' id='likesprint"+response['streamitem_id']+"'></div></div><div id='streamdislike'><a id='dislikecontext_"+response['streamitem_id']+"' style='cursor:pointer;' onClick=\"dislikestatus("+response['streamitem_id']+",this.id);\"><div style='width:70px;' id='dislikesprint"+response['streamitem_id']+"'>Dislike</div></a><div style='width:70px;' id='dislikesprint"+response['streamitem_id']+"'></div></div></div><div class='stream_comment_holder' style='display:none;' id='comment_holder_"+response['streamitem_id']+"'><div id='comment_list_"+response['streamitem_id']+"'><table width=100%><tr><td valign=top width=30px><img class='stream_profileimage' style='border:none;padding:0px;display:inline;' border=\"0\" src=\"imgs/cropped"+response['id']+".jpg\" onerror='this.src=\"img/no_profile_img.jpeg\"' width=\"40\" height=\"40\" ></a><td valign=top align=left><div class='stream_comment_inputarea'><input id='addcomment' type='text' name='content' style='width:100%;' class='input_comment' placeholder='Write a comment...'  onkeyup='growcommentinput(this);' autocomplete='off' onkeypress=\"if(event.keyCode==13){addcomment("+response['streamitem_id']+",this.value,'comment_list_"+response['streamitem_id']+"',"+response['id']+",'"+response['first']+" "+ response['middle']+" "+response['last']+"');this.value='';}\"><br/></div></div>");
            }
        });
        return false
    });
});

INSERT.PHP

$json = array();
$check = "SELECT streamitem_id FROM streamdata WHERE streamitem_creator='$user1_id' ORDER BY streamitem_id DESC";
$check1 = mysql_query($check);
$resultArr = mysql_fetch_array($check1);
$json['streamitem_id'] = $resultArr['streamitem_id'];


mysql_free_result($check1);

$check = "SELECT streamitem_timestamp FROM streamdata WHERE streamitem_creator='$user1_id' ORDER BY streamitem_timestamp DESC";
$check1 = mysql_query($check);
$resultArr = mysql_fetch_array($check1);
$json['streamitem_timestamp'] = Agotime($resultArr['streamitem_timestamp']);
mysql_free_result($check1);



$check = "SELECT username, id, first, middle, last FROM users";
$check1 = mysql_query($check);
$resultArr = mysql_fetch_array($check1);
$json['username'] = $resultArr['username'];
$json['id'] = $resultArr['id'];
$json['first'] = $resultArr['first'];
$json['middle'] = $resultArr['middle'];
$json['last'] = $resultArr['last'];

mysql_free_result($check1);

echo json_encode($json);
4

4 に答える 4

1

(ドキュメントを参照) またはsetInterval(ドキュメントを参照)を使用できます。setTimeout

于 2012-08-05T10:21:24.820 に答える
1

まず、単一実行関数で Ajax 呼び出しをラップします。コールバック関数は同じものを参照します。

$(function() {
    (function ajaxcall() {
       $.ajax({
        url: 'foo.php',
        data: {boo:'moo',goo:'loo'},
        timeout: function() { ajaxcall(); },
        success: function(data) {
            //do somethng with the data
            //done, now call the function again:
            ajaxcall();
            }
        });
    }());
});

次に、PHP で次のように記述します。

$timeout = 30;
$pollinterval = .5;
$counter = 30;
while ($counter >= 0) {
//function which fetches fresh data and sets $test to true if data is returned
  list($test,$dataarray) = fetchdata();
  if ($test) { //JSON_encode the data array and send it
     echo JSON_ENCODE($dataarray);
     }
  else { //no fresh data, query the db again after wating for some time)
    usleep($pollinterval*1000);
    $counter -= $pollinterval;
  }
//timeout, return whetever you have!
echo JSON_ENCODE($dataarray);
于 2012-08-05T13:06:20.990 に答える
0

ポーリングのように聞こえます。さらに更新するためにデータベースを検索するバックエンド PHP スクリプトに要求を送信する AJAX 呼び出しを含めることができます。見つかった場合は、すぐに新しい結果を返します。新しいデータを受信したクライアント側の JS は、別のリクエストを行う前に、たとえば 30 秒間待機します。PHP が新しいデータを見つけられない場合、たとえば 5 秒後に DB に再度クエリを実行し、スクリプトで定義されたタイムアウト (たとえば 25 秒) が発生するまでクエリを続行します。その後、空の結果が返され、それを受信すると、クライアント側の JS はすぐに別のリクエストを行います。

于 2012-08-05T10:19:04.877 に答える
0

Jqueryを使用して、これがあなたが望んでいるものだと思います:

HTML:

<div id="divider-whatever"></div>

Jクエリ:

$(document).ready(function() {

    setInterval(function() {
        div = $("#divider-whatever");
        $.get(data.php, function(responseData) {
            div.html(responseData);
        }, 1000);
        // change 1000 to whatever time you need
        // change data.php to the file where your data is coming from
    });

});

*未検証

お役に立てれば!

于 2012-08-05T10:23:32.387 に答える