RobRobson: Ajax Antwort lässt sich nicht formatieren

Hallo,

ich hab gerade ein riesne Problem und verstehe es einfach nicht.

Man nehme ein INPUT Element und ein kleine Tastatur-funktion:

  
echo "  
<td><input type=text name='bezeichnung' id='bezeichnung'></td>"  
  
<script src='http://code.jquery.com/jquery-latest.min.js'></script>  
<script>  
        $('#bezeichnung').keyup(function () {  
          var getipptertext = $(this).val();  
  
          $.ajax({  
            type: 'POST',  
            url: 'ajax/ajax_get.php',  
            data: 'get_type=known_events&text='+getipptertext,  
            success: function(content){  
            $('p').text(content);  
            }  
          });  
        }).keyup();  

..die mittels Ajax was vom Server holt:

  
$l = mysql_query("SELECT blaa FROM ...");  
while($row = mysql_fetch_assoc($l)) $out .= $row[bezeichnung];  
echo $out;  

Das Ergebniss können mehrere Zeilen sein (darum WHILE(..)) Problem ist das auf der ersten Seite alle Zeilen an einander geklatscht werden. Es ist mit nicht möglich einen Zeilenumbruch zu erzeugen.

Ich hab schon sehr viel ausprobiert (\n, \\n, <br>'s, %A0, alles immer mit ' und mit ") ich hab kein Plan wie ich diesen Antworttext mittels Javascript dynamisch Zeilenweise anzeigen kann.

Kann mit bitte jemand einen Tip geben wo ich weitersuchen kann!?!? :D

vielen Dank,
Rob

PS: ich könnte das resultat umständlich fomatiere, die formatierung dann wiede rmit JS auslesen und Tabellenzeilen in einer Tabelle erzeugen. Abe rich hoffe es geht auch deutlich schlanker.

  1. Hi!

    Ich hab schon sehr viel ausprobiert (\n, \\n, <br>'s, %A0, alles immer mit ' und mit ") ich hab kein Plan wie ich diesen Antworttext mittels Javascript dynamisch Zeilenweise anzeigen kann.

    Zeilenumbrüche werden von HTML wie Leerzeichen behandelt. Die Zeichenfolge <br> erzeugt auch keinen Zeilenumbruch. Der wird nur durch das HTML-Element br erzeugt. Du solltest dir also zum einen den JQuery(?)-Weg suchen, wie HTML-Elemente erstellt werden und zum anderen einen Mechanismus ausdenken, der deinen Text an Zeilenumbrüchen auftrennt und ihn dann stückweise zusammen mit den br-Elementen in den Absatz einfügen.

    Lo!

    1. Hi!

      JQuery(?)-Weg suchen, wie HTML-Elemente erstellt werden und zum anderen einen Mechanismus ausdenken, der deinen Text an Zeilenumbrüchen auftrennt und ihn dann stückweise zusammen mit den br-Elementen in den Absatz einfügen.

      Lo!

      Hi, Danke für die fixe Antwort am Sonnntag Mittag :D

      also ist es schon so wie ich es fast vermutete in meinem "PS" :-/
      Das wird sehr schwierig, da die Inhalt die ich via Ajax hole sehr "menschenlich" sind. Also beliebigsten Text enthalten können.

      Noch ein kleine Frage, bin ich bei AJAX auschließlich auf das "echo()" angewiesen als Rückgabefunkion, ober gibt es noch eine Möglichkeit etwas seperierter und die zeilen etwas besser determinierbar auseinander zuhalten?

      Danke schön,
      Ro

      1. Hi,

        Noch ein kleine Frage, bin ich bei AJAX auschließlich auf das "echo()" angewiesen als Rückgabefunkion,

        das ist keine Rückgabefunktion. Mittels AJAX holst Du vom Client ausgehend Daten vom Server ab. Wie dieser sie zur Verfügung stellt, ist AJAX völlig egal, und dem Client noch viel mehr. Du könntest beispielsweise auf PHP und andere serverseitige Programmtechniken komplett verzichten und vom Server eine Datei des Filesystems ausliefern lassen.

        ober gibt es noch eine Möglichkeit etwas seperierter und die zeilen etwas besser determinierbar auseinander zuhalten?

        Der Server liefert die Daten in Form einer Ressource zurück. Punkt. Was der Client damit macht, ist seine Sache (bzw. Deine, da Du es clientseitig implementierst). Die Möglichkeiten entsprechen denen, die der Client besitzt; der Server hat lediglich die Aufgabe, die Daten in einem Format zu liefern, welches für diese Aufgabe günsgtig ist - was ebenfalls von Dir implementiert wird. Ob per echo, per print, per outputFile, per Ablegen als statische Datei oder per PSI-Schnittstelle direkt zu Deinem Gehirn, ist vollkommen unerheblich. Du wählst.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. OK, Danke für die Hinweise.

          Ich habe es im Endeffekt wie folgt gelöst.
          Es funktioniert, aber was sagt ihr dazu, ist die Lösung Müll oder OK so?

          ich gebe also via echo einen Datensatz aus der mit einem persönlichen Steuerzeichen (%%%) versehen ist:

            
          :php:  
          while($row = mysql_fetch_assoc($l)) $out .= $row[bezeichnung].'%%%';  
          echo $out;  
          
          

          Auf der Empfangsseite (AJAX), splitte ich den string um ihn zeilenbasiert zu haben, dann füge ich für jede Zeile den Inhalt + einen Zeilenumbruch ein. (Mein Problem vorhin wurdem im Grunde durch .append() gelösst)

            
          var zeilenweise = content.split('%%%');  
           for (var i = 0; i < zeilenweise.length; ++i) {  
           if(zeilenweise[i].length > 1) $('p').append('<a href=index.php  >'+zeilenweise[i]+'</a><br>');  
          }
          

          viele grüße,
          rob

          1. Moin Moin!

            Ich habe es im Endeffekt wie folgt gelöst.
            Es funktioniert, aber was sagt ihr dazu, ist die Lösung Müll oder OK so?

            Au weia!

            Warum sendest Du nicht einfach ein Array in Javascript-Notation, das pro Element eine Zeile enthält? Siehe auch JSON.

            Alexander

            --
            Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
          2. hi,

            Ich habe es im Endeffekt wie folgt gelöst.
            Es funktioniert, aber was sagt ihr dazu, ist die Lösung Müll oder OK so?

            Is schon ok. Es gibt verschiedene Möglichkeiten einer strukturierten Datenübertragung, Deine mit dem Eigenbau-Delimiter ist eine davon, bringt jedoch für Weiterentwicklungen ein paar Hürden.

            Die Response wird mit JS verarbeitet, neben split() gibt es auch eval(), womit ein Array oder ein Objekt entstehen kann, sofern die Response entweder eckige Klammern oder geschweifte Klammern hat (JSON). Bleiben wir mal beim Array:

            Serverseitig gibst Du z.B. aus als Response:

            ["Zeile_1", "Zeile_2", "Zeile_3"]

            (natürlich noch entsprechend ge-quoted außenrum)

            Im DOM kriegst Du mit

            var Zeilen = eval(response);

            ein Array mit dem Zeilen.

            Delimiter (split) oder JSON (eval) ist für die meisten Aufgabenstellungen ok, es gibt ganze Frameworks die darauf aufbauen. Zeichenorientierten Strukturierungen haftet jedoch grundsätzlich der Nachteil an, dass diejenigen Zeichen, die als Strukturelemente dienen (Klammern, Delimiter), im Inhalt der Nachricht entsprechend maskiert werden müssen.

            Hotti

          3. Moin!

            var zeilenweise = content.split('%%%');
            for (var i = 0; i < zeilenweise.length; ++i) {
            if(zeilenweise[i].length > 1) $('p').append('<a href=index.php  >'+zeilenweise[i]+'</a><br>');
            }

              
            Wenn du sowieso HTML in dein Ergebnis-P-Tag einsetzen willst, warum gibst du dann mit PHP nicht das gesamte HTML aus und setzt es ALS HTML (und nicht als Text) in das Zielelement ein?  
              
             - Sven Rautenberg
            
      2. Hi,

        JQuery(?)-Weg suchen, wie HTML-Elemente erstellt werden und zum anderen einen Mechanismus ausdenken, der deinen Text an Zeilenumbrüchen auftrennt und ihn dann stückweise zusammen mit den br-Elementen in den Absatz einfügen.

        Lo!

        Hi, Danke für die fixe Antwort am Sonnntag Mittag :D

        also ist es schon so wie ich es fast vermutete in meinem "PS" :-/

        Evtl. könnte man auch mit CSS (white-space:pre) arbeiten (oder, was intern aber mehr oder weniger auf's Gleiche rauskommt, statt mit einem Absatz p ein Präformatierten Text pre benutzen) ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. hi,

    PS: ich könnte das resultat umständlich fomatiere, die formatierung dann wiede rmit JS auslesen und Tabellenzeilen in einer Tabelle erzeugen. Abe rich hoffe es geht auch deutlich schlanker.

    Du könntest mit Feldern arbeiten, das bietet sich an, weil Deine Daten ebenfalls aus einer DB mit Feldern geholt werden. Da gäbe es einmal die Möglichkeit, mit Feldern konstanter Länge (1) zu arbeiten oder, wenn es richtig schlank werden soll, jedem Feld eine Längenangabe voranzustellen. Nehmen wir mal Variante (1), Deine Abfrage liefert z.B. stets 3 Felder, mit jeweils 50 Zeichen (nicht bytes sondern Zeichen, weil JS keine bytes versteht). Damit hat jede Zeile eine Zeichenlänge von 3 mal 50 Zeichen, was mit JS problemlos aufgedröselt werden kann.

    So brauchst Du nicht einmal einen Zeilenumbruch oder sonstwelche Trennzeichen (Delimiter), weil: jede Zeile hat eine Länge von 150 Zeichen. Beachte, dass UTF-8-Zeichen in JS als ein Zeichen gelten, auch wenn die jeweils 2 oder 3 bytes lang sind. Jedes Datenfeld muss am Ende mit Leerzeichen aufgefüllt werden, damit alles passt.

    Vom Datenvolumen her schlanker wirds mit Feldern variabler Länge. Da JS auch hier wieder zeichenorientiert arbeitet, wird die Längenangabe mit Zahlen und führenden Nullen gemacht, 3-stellig reicht bestimmt und Du nimmst parseInt(Basis10);

    Oder Du machst das, was Alle machen: Nutze ein Framework und JSON oder XML (igitt).

    Hotti