ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
6500
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    sonicks ist offline Mitglied Gold
    Registriert seit
    Apr 2002
    Ort
    Stuttgart
    Beiträge
    212
    Hallo

    Ich habe erst ein mal eine allgemeine Verständnisfrage an die Leute die sich mit den Ajax Funktionen im jQuery Framework auskennen.

    Beispiel Twitter:

    Ich schreibe einen Text in das Formular und das ganze wird direkt und ohne Seitenreload unten an die bisher ausgelesenen "Tweets" angereiht. Das ganze läuft über eine MySQL Datenbank

    So, jetzt zum Verständnis:

    Ich hab also das Formular und den jQuery Code allá:

    Code :
    1
    2
    3
    4
    5
    6
    
    # $.ajax({  
    #   type: "POST",  
    #   url: "ausführen.php",  
    #   data: dataString,  
    #   success: function() { 
    ....

    Was mache ich dann in der ausführen.php ? Ich INSERT die Daten in die DB und SELECT im nächsten Schritt in der selben Datei wieder alle Daten neu (?). Dann krieg ich durch den jQuery Request die Daten wieder zurück und möchte das Ganze dann wie man es normal macht mit einer for Schleife (?) ausgeben an der Stelle damit es so aussieht, als würde nur der neuste Eintrag hinzugefügt werden.

    Ich hoffe ihr könnt nachvoll ziehen, was ich an diesem Vorgang noch nicht so ganz verstehe und wäre dann über Anregungen oder ein paar Codeschnipsel sehr dankbar!

    MfG
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.112
    Moin,

    Ich INSERT die Daten in die DB und SELECT im nächsten Schritt in der selben Datei wieder alle Daten neu (?).
    Jo, soweit korrekt.
    Die neu selektierten Daten musst du dann in irgendeiner Form in der ausführen.php ausgeben, diese Ausgabe wird dann an die success-Funktion übermittelt.

    Wie du es machst, da gibt es mehrere Möglichkeiten.

    Es kann zum Beispiel ein HTML-Codefragment sein, den du direkt im Dokument an der gewünschten Stelle einfügst, aber auch ein JSON-codierter String, den du dann erst noch verarbeitest(vorteilhafter bei umfangreichen Daten).
     

  3. #3
    sonicks ist offline Mitglied Gold
    Registriert seit
    Apr 2002
    Ort
    Stuttgart
    Beiträge
    212
    Ok d.h. ich bau in der PHP Datei alles ein sowie eine Ausgabe ungefähr so:

    PHP-Code:
    while($data mysql_fetch_array(..)){
          
    $return_data "<div>".$data['name']."</div><br />
                          <div>"
    .$data['text']."</div>";

    Und kann dann per jQuery die $return_data ausgeben? Geht das bei jQuery auch über das "success" ?
     

  4. #4
    sonicks ist offline Mitglied Gold
    Registriert seit
    Apr 2002
    Ort
    Stuttgart
    Beiträge
    212
    Hallo, ich nochmal.

    Ich habe jetzt etwas rumprobiert und bin zu einem ganz akzeptablen Ergebnis gekommen. Hier der Code:

    HTML-Code:
    <html>
      <head>
          
        <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>    
    
      </head>
    
      <body>
    
      <div id="content">
      	<h2>Kommentare:</h2>
        <div class="kommentar"></div>
      </div>
    
      <div id="formular">
          <form method="" action="">
            <label for="name">Name:</label><input type="text" name="name" id="name" /><br clear="both" />
            <label for="email">E-Mail:</label><input type="text" name="email" id="email" /><br clear="both" />
            <label for="text">Text:</label><textarea name="text" id="text"></textarea><br clear="both" />
            <label for="submit"></label><input type="submit" name="submit" id="submit" value="Senden" /><br clear="both" />
          </form>
      </div>
    
    <script type="text/javascript">
    	$(function() {
    		$('.kommentar').load('includes/process.php');
    		$("#submit").click(function() {
    			
    			// Loading GIF im Div Containter "Kommentar" anzeigen
    			$('.kommentar').append('<img src="images/ajax-loader.gif" alt="loading..." id="loading" />');
    			
    			var name = $('#name').val();
    			var email = $('#email').val();
    			var text = $('#text').val();
    			
    			$.ajax({
    			   type: 'POST',
    			   url: 'includes/process.php',
    			   data: 'name=' + name + '&email=' + email + '&text=' + text,
    			   
    			   success: function(response){
    				 $('#response').remove();  
    				 $('.kommentar').append('<div id="response">' + response + '</div>');
    				 $('#loading').fadeOut(500, function() {
    					$(this).remove();								 
    					});
    			   }
    			   
    			});
    			return false;     
    			});
    			
    	});
    </script>
    
      </body>
    </html>
    PHP-Code:
    <?php
        
        $db_host 
    "localhost";
        
    $db_user "root";
        
    $db_passwort "";
        
    $db_name "jquery";
        
        
    $db mysql_connect($db_host$db_user$db_passwort);
            if(!
    $db) {
                
    header("Location: db_error.php");
            }
        
    mysql_select_db($db_name);
        
        if(isset(
    $_POST["name"])){
            
    $sql_insert 'INSERT INTO test SET
                                name = "'
    .$_POST["name"].'",
                                email = "'
    .$_POST["email"].'",
                                text = "'
    .$_POST["text"].'"
                                '
    ;
            
    $result_insert mysql_query($sql_insert);
        }
        
        
    $sql "SELECT * FROM test";
        
    $result mysql_query($sql);
        
        while(
    $data mysql_fetch_array($result)){
        
            echo 
    '<div style="border: 1px solid #000000;">'.$data["name"].'</div><br />
                  <div style="border: 1px solid #000000; margin-bottom: 60px;">'
    .$data["text"].'</div>';
            
        }



    ?>
    Das Problem ist jetzt folgendes:

    Ich hol mir per
    HTML-Code:
    $('.kommentar').load('includes/process.php');
    die bisher bestehenden Einträge aus der Datenbank. Also bevor man irgendeine Aktion auf der Seite startet.
    Das Problem jetzt ist dass bei einem Eintrag über das Formular, die gesamten Einträge nochmal geholt werden + dem neuen. D.h. die bisher bestehenden werden zwei mal angezeigt.

    Weiß dazu jemand eine sinnvolle Lösung?
    Und was gibt es für Möglichkeiten die bestehenden Einträge auch schon anzeigen zu lassen wenn JS deaktiviert ist.

    Danke

    MfG
     

  5. #5
    Avatar von rd4eva
    rd4eva ist offline Mitglied Brillant
    Registriert seit
    Feb 2003
    Beiträge
    802
    D.h. die bisher bestehenden werden zwei mal angezeigt.
    Eine Möglichkeit wäre ganz einfach nicht alle zu "Selecten" sondern nur jeweils den letzten Eintrag und diesen ganz einfach an die ja eh schon bestehenden anzuhängen.

    Und was gibt es für Möglichkeiten die bestehenden Einträge auch schon anzeigen zu lassen wenn JS deaktiviert ist.
    Du bist doch beim ersten Anzeigen garnicht auf JavaScript angewiesen. Beim ersten Aufruf der Seite kannst du alle bisher bestehenden Einträge per PHP ausgeben lassen.
     
    In order to understand recursion, one must first understand recursion.

  6. #6
    sonicks ist offline Mitglied Gold
    Registriert seit
    Apr 2002
    Ort
    Stuttgart
    Beiträge
    212
    Hallo,

    Danke für die Antwort! Ich hab jetzt die Inhalte per PHP von Anfang an ausgeben lassen und eine extra PHP Datei für den Eintrag & Selektieren des letzten Eintrages. Dieser wird dann genauso wie im letzten Post beschrieben an die bestehenden angehängt.
    Soweit, so gut!
    Funktioniert auch einwandfrei.

    Nur wenn ich einen Eintrag schreibe, dieser wird angehängt, und gleich nochmal einen schreibe, dann wird der vorletzte nicht mehr angezeigt sondern nur der letzte. Jetzt stellt sich für mich die Frage wie und ob ich das lösen soll. Das ganze soll später mal auf eine Kommetarfunktion von einem Blogeintrag angewandt werden. Da kommt es ja in der Regel nicht vor, dass man zwei Kommentare direkt hintereinander schreibt ohne die Seite zu refreshen. D.h. ich könnte evtl. eine Cookie Eintragsperre für eine Minute o.ä. erstellen oder das Problem einfach ignorieren und hoffen, dass niemand zweimal hintereinander einen Kommentar schreibt.

    Weiß jemand wie man das in der Regel löst?

    Danke

    Grüße
     

Thema nicht erledigt

Ähnliche Themen

  1. jQuery & Ajax
    Von Senshi86 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 22.05.10, 11:46
  2. jQuery: jQuery auf AJAX Response anwenden
    Von pointsdächster im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 12.04.10, 01:15
  3. jQuery Ajax Link
    Von scherlomatic im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 28.01.10, 21:47
  4. jQuery und Ajax
    Von RedShot im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 13.12.09, 00:20
  5. jquery ajax
    Von chaosgoettin im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 10.08.07, 15:41