Ajax aktualiesiert mein Nachrichtensystem nicht richtig

brizzi

Erfahrenes Mitglied
Hallo liebe Gemeinde von tutorials.de,

ich schreibe euch an, da ich nicht weiter komme und mein Lehrer ebenfalls keine Idee hatte warum es nicht klappt.

Nun ich habe vor ein kleines Chat-programm zu erstellen. Soweit steht auch alles. Die nachrichten werden in gruppen hashs gepackt und per post an den chat weiter gegeben, damit mein mysql-script weiss welche Nachrichten bzw. welchen gruppen hashs er aktualiesiren soll. Es fehlt einfach nur, dass er mir die neuen nachrichten anzeigt. Per Ajax läd er die conversation neu, jedoch ohne den aktuelsten einträgen. Es happert nur noch an dieser stelle. Das ist echt ärgerlich.

Hier gebe ich euch noch meine scripte mal weiter damit Ihr auch genau wisst wo das problem liegt, bzw. das problem Lokaliesieren Könnt.

Das ist meien AJAX Funktion
Code:
<script type="text/javascript" >

$(document).ready(function() {
	$("incontent").load("conver.php");
var hash = $("#hasher").val("");
var auto_refresh = setInterval(
function ajax ()
{
  $('#incontent').fadeOut("slow").load(function() {
			$.ajax({
				url:"conver.php?r=" + Math.random(),
				data: "hash="+hash,
				cache: false,
				success: function(update)
				{ 
				$("#incontent").html(update);
				}  
			});
return false;
  }).fadeIn("slow")}, 30000); 
  $.ajaxSetup({ cache:false});
  
 });
 setTimeout(ajax(),3000);
</script>


und das ist die jeweilige Seite die aktualiesiert werden soll

PHP:
 <?php

header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
session_start();
$_username = $_SESSION["User"];
$von=$_SESSION['usere'];
$my_id=$_SESSION['my_id'];
require("config.inc.php");
$_SESSION['hash']=$_GET['hash'];
?>

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    $("#fom12").submit(function() {
		if($("#nachrichten").val() == ""){
			$("#incontent").html("Bitte schreibe eine Nachricht");
		}else{
			var nachrichten = $('#nachrichten').attr("value");
			var hash = $('#hasher').attr("value");
			$("#incontent").html("Lade...");
			$.ajax({
				type:"POST",
				url:"die_msg.php",
				data: "nachricht=" + nachrichten +"&hash="+hash,
				success: function(msg)
				{ 
				$("#incontent").html(msg);
				}
			});
		}
		return false;
	});
});
</script>




<input type="text" value="<? echo $_GET['hash'];?>" id="hasher" name="hash" style="visibility:hidden">

 <?  
 require("config.inc.php"); 
if(isset($_GET['hash']) && !empty($_GET['hash'])){
	
	$hash= $_GET['hash'];
	

	$_SESSION['hash']=$hash;
	
	$message_query= mysql_query("SELECT * FROM nachrichten WHERE gruppen_nachricht='$hash' ORDER BY datum DESC");
	while($run_message = mysql_fetch_array($message_query)){



		$from_id= $run_message['from_id'];
		$message= $run_message['nachricht'];
		$datem= $run_message['datum'];
		$_SESSION['from_user']=$run_message['from_id'];	
				
				$user_query= mysql_query("SELECT * FROM Persons WHERE PersonID='$from_id'");
				$run_user= mysql_fetch_array($user_query);
				$from_username= $run_user['username'];
		
				
			if ($from_username == $_username) {
					
				echo'<div class="ich">   
   						 <div class="linker"> 
  							 <h1><b> '.$from_username.'</b></h1>
    						 <h1> '.$message.'</h1>
    						 <div class="wann"> <p> '.$datem.' </p> </div>
						 </div>
							 <div class="um_ecke">
        				 		<div class="ecke_links">  </div> 
    					     </div>
					</div>';
				
				} else {					
						echo'<div class="anderer">   
 								<div class="rechter"> 
       								 <h1><b> '.$from_username.'</b></h1>
    						 		 <h1> '.$message.'</h1>
    					   		  <div class="wann"> <p> '.$datem.' </p> </div>
     					    	</div>
       					   		 <div class="um_ecke_r"> 
       					    		<div class="ecke_rechts">  </div> 
     					   		 </div> 
							</div>';
				}
		}
	
	?>
    <br/>
<!--   <script type="text/javascript" src="jquery-1.11.0.js"></script> -->


    <form name="forml" method="post" id="fom12">

 
    
    Antwort:<br/>
    <textarea name="nachricht"  id="nachrichten" rows="6" cols="50"></textarea>
    <br/>
    <input type="submit" id="submit"  value="Sende" />
    </form>  

    <?

	}
	?>

Vielen Dank schon mal im Vorraus und hoffe ihr könnt mir helfen und ich hab es nicht im falschen forum gepostet.

mfg. brizzi :D :D
 
$.load erwartet als erstes argument eine URL(string), in ajax() übergibst du jedoch eine Funktion.

Weiterhin:
Code:
setTimeout(ajax(),3000);

1. die funktion ajax ist nicht global verfügbar
2. selbst wenn sie verfügbar wäre, würde das nicht funktionieren, du musst die Klammern nach ajax entfernen

Wenn dein Lehrer keine Idee dazu hatte sollte er vielleicht ein anderes Fachgebiet wählen, diese Fehler sind nun wirklich offensichtlich.
 
Zuletzt bearbeitet:
Ok, könntest du mir eventuell ein beispiel zeigen? weiss stehe gerade i-wie auf dem schlauch.

Zu mienem Lehrer, gut man hat halt mal momente wo man offensichtliche fehler nicht sieht. Daher ist es ein bisschen hart was du sagst.

Naja wenn du mir netter weisse noch ein beispiel bringen könntest wäre es super

Danke viel mals nochmal :)

mfg
 
Das würde bspw. die conver.php alle 3 sec abfragen und den Inhalt in #incontent laden:

Javascript:
$(document).ready(function() {
    $("#incontent")
     .on('msg.load',
         function() {
           var $this=$(this);
           $this.fadeOut("slow")
            .load('conver.php',
                  $.param({hash : $("#hasher").val(),
                           r    : new Date().getTime()}),
                           function() {
                             $this.fadeIn('slow');
                              setTimeout(function() {
                                  $this.trigger('msg.load');
                                },3000);
                           })}).trigger('msg.load');
});

Zu deinem Lehrer:
Ich weiß ja nicht ob das Bestandteil einer Hausaufgabe etc. ist aber sofern JS Bestandteil eures Unterrichts ist sollte man diese Fehler auf den ersten Blick erkennen.

Allein ein Blick in die console(üblicherweise der erste Blick wenn etwas nicht funktioniert) hätte eine exception betreffend der unbekannten Funktion zutage gefördert.

Aber um das Fachwissen des Lehrers nicht herabzuwürdigen-ich würde einfach mal sagen er hat es sich nicht wirklich angeschaut ;)
 
Ok super viel dank für dein beispiel.

Ne das ist keine Hausaufgabe, bin eig. von der schule schon runter und bin eig. auch ein gelernter Grafikgfestalter. Nur ich erweitere mein horizont und artbeite ich in das PHP und JS programmieren ein und habe halt noch kontakt mit diesem Lehrer und er hilft mir bei fragen . Naja er hat es halt übersehen und haben ehrlich gesagt, beide nicht daran gedacht einfach mal in firebug oder in der console zu schauen.

Naja viel dank nochmal und ich versuche es jetzt mal und sage dir bescheid :)

edit:
Hey abuzze,

ich habe jetzt mal dein Code ausprobiert und, mir fällt auf, dass es kein mucks macht, es bewegt sich einfach nicht, faded nicht aus oder ein. Habe geguckt, ob vielleicht doch nur ein zeichen fehler drinne war aber auch nichts gefunden. Hast du eine Idee oder worauf ich achten muss wenn ich es benutze?

edit2:
Hallo liebe Community, es sind jetzt nun auch schon paar tage vorbei, seit dem ich das hier gepostet habe, und wollte nun mal fragen, ob jemand mir da eventuell weiter helfen kann oder mir das obrige beispiel was näher erklären kann. Habe jetzt die letzten Tage noch privat einiges zu tun gehabt und kam auch nicht mehr dazu mich weiter zu informieren.

Naja ich hoffe ihr könnt mir da weiter helfen, wäre echt super.

mfg
brizzi
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück