2014-07-19 4 views
0

J'ai donc essayé différentes manières d'obtenir de nouvelles données au cours des 5 derniers jours et je suis déterminé à terminer ce système de notifications car je n'aime pas finir quelque chose avant de passer à Quelque chose de nouveau. J'ai essayé le stockage local mais il n'a pas eu l'effet désiréAJAX GET - Nouveaux records par temps

Donc j'ai d'abord créé l'ajax pour envoyer la dernière notification par le côté côté serveur du côté client et obtenir un nouveau pour l'utilisateur de la session comme ça.

<? 
$user1_id=$_SESSION['id']; 
$call="select * from notifications WHERE notification_targetuser='$user1_id' AND notification_status=1 ORDER BY notification_id DESC LIMIT 1"; 
     $chant=mysqli_query($mysqli,$call) or die(mysqli_error($mysqli)); 

      while($notification=mysqli_fetch_array($chant)){ 
      ?> 


      <script type="text/javascript"> 

function loadIt() { 
    var notification_time="<?php echo $notification['notification_time'] ;?>" 


$.ajax({ 
type: "GET", 
url: "viewajax.php?notification_time="+notification_time, 
dataType:"json", 
cache: false, 
success: function(response){ 
    if (response.notificiation_time > notification_time) { 
     $("#notif_actual_text-"+notification_time).prepend('<div class="notif_ui"><div class="notif_text"><div id="notif_actual_text-'+response['notification_id']+'" class="notif_actual_text"><img border=\"1\" src=\"userimages/cropped'+response['notification_triggeredby']+'.jpg\" onerror=this.src=\"userimages/no_profile_img.jpeg\" width=\"40\" height=\"40\" ><br /><a href="'+response['notification_id']+'">'+response['notification_content']+' </a><br />'+response['notification_time']+'<br /></div></div></div></div>'); 

     i = parseInt($("#mes").text()); $("#mes").text((i+response.num)); 
    } 
} 
}); 
} 
setInterval(loadIt, 10000); 


</script> 

<? } }?> 

Mais c'est là que je deviens coincé, parce que je veux l'utiliser notification_time pour rechercher le serveur pour rien plus récent contre l'ancien .. renvoient la balle et la mettre dans son div désigné puis utiliser cette nouvelle notification_time sur la prochaine recherche au lieu de la même que je viens d'utiliser pour obtenir la nouvelle, car cela serait plutôt inutile pour ce que je veux atteindre. Nous savons tous comment les réseaux sociaux le font, le problème est, je serai le premier à admettre, c'est confondre la vie hors de moi ...

Voici mon Php qui n'est évidemment pas complet.

if(isset($_GET['notification_time'])){ 

$id= mysqli_real_escape_string($mysqli,$_GET['notification_time']); 
$user1_id= mysqli_real_escape_string($mysqli,$_SESSION['id']); 
$json = array(); 
$com=mysqli_query($mysqli,"select notification_id,notification_content,notification_time,notification_triggeredby from notifications where notification_id > '$id' AND notification_targetuser='$user1_id' AND notification_status='1' "); 
echo mysqli_error($mysqli); 

$num = mysqli_num_rows($com); 
if($num==1){ 

    $json['num'] = $num; 
}else{ 
    $json['num'] = 0; 
} 
$resultArr = mysqli_fetch_array($com); 
$json['notification_id'] = $resultArr['notification_id']; 
$json['notification_content'] = $resultArr['notification_content']; 
$json['notification_triggeredby'] = $resultArr['notification_triggeredby']; 
$json['notification_time'] = $resultArr['notification_time']; 
mysqli_free_result($com); 

echo json_encode($json); 

} 

Répondre

1

La méthode variable globale insouciante irait quelque chose comme ceci:

var notification_time="<?php echo $notification['notification_time'] ;?>"; // make global 

function loadIt() { 



$.ajax({ 
type: "GET", 
url: "viewajax.php?notification_time="+notification_time, 
dataType:"json", 
cache: false, 
success: function(response){ 

    if (response.notificiation_time > notification_time) { 
     $("#notif_actual_text-"+notification_time).prepend('<div class="notif_ui"><div class="notif_text"><div id="notif_actual_text-'+response['notification_id']+'" class="notif_actual_text"><img border=\"1\" src=\"userimages/cropped'+response['notification_triggeredby']+'.jpg\" onerror=this.src=\"userimages/no_profile_img.jpeg\" width=\"40\" height=\"40\" ><br /><a href="'+response['notification_id']+'">'+response['notification_content']+' </a><br />'+response['notification_time']+'<br /></div></div></div></div>'); 

     i = parseInt($("#mes").text()); $("#mes").text((i+response.num)); 
    } 
    notification_time = response.notificiation_time; // update global after each call 
} 
}); 
} 
setInterval(loadIt, 10000); 
+0

Merci victoire, juste essayer de dépasser la valeur NULL s'il n'y a pas de nouveau contenu. – Dave

0

façon rapide de se rendre à le faire est si vous stockez le « notification_time » de la dernière requête dans une variable et vérifier cette variable contre le nouveau « notification_time »

if(!isset($time)){ 
$time = $notification['notification_time']; 
}else{ 
if($time < $notification['notification_time']){ 
    //update the div 
    $time = $notification['notification_time']; 
} 
} 
+0

Est-ce pour aller dans le côté client ou côté serveur? – Dave

+0

ajoutez-le sur la même page que vous appelez mysqli_fetch_array() instruction – plaky93

+0

Je ne vois vraiment pas comment cela fonctionnerait, vu que la variable $ time sera exactement la même que la $ notification ['notification_time'] – Dave

0

Vos notification_time besoins variables être mis à jour chaque fois par le rappel success dans votre requête AJAX.

Il doit donc être en dehors de votre loadIt. Vous pourriez regarder dans le jQuery data method. Cela vous permettrait de l'attacher quelque part comme l'élément parent de votre liste de notification et d'éviter de vous contenter d'un global.

Quelques autres suggestions:

  • On dirait une faute de frappe ici: if (response.notificiation_time > notification_time) {
  • Évitez concaténation de chaîne dans votre rappel AJAX pour générer de nouveaux éléments DOM. Utilisez plutôt les éléments jQuery $newEl = $('<div />')...;.
  • Réécrivez le code SQL en haut de votre page Web et supprimez cette boucle while. Cette boucle donne entièrement la mauvaise impression.