Actualización de Ajax en div con una identificación

¿Cómo voy a actualizar un div con una id cada x segundos? Quiero que actualice los estados de los usuarios que están dentro de este, que incluye el tiempo de la cantidad de comentarios realizados en esa publicación individual.

He intentado setInterval pero demora 10 segundos para que se agregue el estado y luego duplica el estado cada x cantidad de segundos después de eso. Todo lo que necesito es que los datos de respuesta se actualicen, no la inserción del comentario que se volverá a agregar cada 10 segundos.

HTML:

 

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("
X
"+response['first']+" "+ response['middle']+" "+response['last']+" said
"+response['streamitem_timestamp']+"
"+newmsg+"

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

Primero complete la llamada Ajax en una función de ejecución única, con la función de callback haciendo referencia a lo mismo:

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

Luego, en el PHP escribe algo como:

 $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); 

Puede usar setInterval ( ver Documentación ) o setTimeout ( ver Documentación ).

Suena como un sondeo. Puede incluir una llamada AJAX, que enviará una solicitud a un script back-end de PHP que buscará en la base de datos para una mayor actualización. si se encuentra, devolverá inmediatamente el nuevo resultado. El lado del cliente JS al recibir los nuevos datos, esperará, por ejemplo, 30 segundos antes de realizar otra solicitud. Si el PHP no encuentra ningún dato nuevo, consultará el DB nuevamente, por ejemplo después de 5 segundos, y continuará haciéndolo hasta que ocurra un tiempo de espera definido por el script, digamos 25 segundos. Luego devolverá un resultado vacío, al recibir el cual el lado cliente JS inmediatamente hará otra solicitud.

Creo que esto es lo que quieres, usando Jquery:

HTML:

Jquery:

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

*no probado

¡Espero que esto ayude!