Jquery um Inhalte nachzuladen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Jquery um Inhalte nachzuladen

    Hallo Freunde,

    Ich stehe auf dem Schlauch, und bin mit JQery auch nicht besonders gut vertraut bis jetzt.

    Derzeit habe ich eine foreach die eine Funktion aufruft, diese Funktion gibt 1 oder null zurück.
    In jedem foreach ist ein echo eingebaut um mir das Ergebnis der Funktion pro Datensatz anzuzeigen.
    Nun möchte ich aber nicht warten bis die foreach 1000 mal durchgelaufen ist, sondern gerne nach jedem Durchlauf das Ergebnis bereits anzeigen.

    Ich spiele mich nun schon seit mehreren Stunden und habe folgendes Ergebnis:

    Quellcode

    1. <script type="text/javascript">
    2. function doRequest() {
    3. jQuery("#topbar").fadeOut('slow', function() {
    4. jQuery.ajax({
    5. type: "GET",
    6. url: "ajax.php",
    7. cache: false,
    8. success: function(html){
    9. jQuery("#topbar").html(html);
    10. jQuery("#topbar").show('slow',function() {
    11. setTimeout('doRequest()',1000);
    12. });
    13. }
    14. });
    15. });
    16. }
    17. doRequest();
    18. </script>
    Alles anzeigen


    Quellcode

    1. <div id="center-rows">
    2. <div id="links">Nu&nbsp;</div>
    3. <div id="rows">
    4. <div id="topbar"></div>
    5. </div>
    6. <div id="rechts">&nbsp;aantal rijen</div>
    7. </div>


    Quellcode

    1. <?php
    2. $rowCount = "100";
    3. $i = 0;
    4. while ($i < $rowCount)
    5. {
    6. echo '<div style="float: left; font-size:' . (MySQL_RESULT($results,$i,'count') * 5) . 'px;">' . MySQL_RESULT($results,$i,'word') . '</div>';
    7. $i++;
    8. }
    9. ?>


    Hier wird die Seite nun alle drei Sekunden neu geladen, mit dem Inhalt der eben durch ajax.php zur Verfügung gestellt wird. Soweit ist das ja auch richtig, das Problem ist das der Refresh aber nicht endet wenn die Schleife durchgelaufen ist / alle Ergebnisse vorhanden sind. Zumal ich kein Freund von "Reloads der Seite" bin ... ich hätte eben gerne das nach Durchlauf der Schleife das Ergebnis sichtbar wird....

    Ein Beispiel sieht man auch checkdomain.de wenn man eine domainsuche durchführt .... die laden quasi in einer Tabelle alle möglichen TLD's - dann kommt eine Grafik pro TLD für jede Spalte bis das Ergebnis verfügbar ist, und dann wir es ausgetauscht, das ist eigentlich genau das was ich suche....

    Hoffentlich erbarmt sich einer meiner :)
    Das Leben ist binär - du bist eine 1, oder eine 0
  • Moin!

    Zuerst ein kleiner Tipp: Anstelle von jQuery kannst du auch $ schreiben, UND du kannst du Methoden konkatenieren.

    Zum Beispiel:

    Quellcode

    1. function doRequest() {
    2. $("#topbar").fadeOut('slow', function() {
    3. $.ajax({
    4. type: "GET",
    5. url: "ajax.php",
    6. cache: false,
    7. success: function(html){
    8. $("#topbar").html(html).show('slow',function() {
    9. setTimeout('doRequest()',1000);
    10. });
    11. }
    12. });
    13. });
    14. }
    15. doRequest();
    Alles anzeigen


    Dann ... was deine Frage bezüglich des Endes der Schleife betrifft ... Spontan fällt mir folgendes dazu ein:

    - Wenn du einen Seitenaufbau wie bei checkdomain.de möchtest, würde ich folgendes tun:

    1. Lass dir von einem zweiten PHP-Script die IDs deiner Datensätze als JSON oder ähnliches zurückgeben
    2. Erstelle mit JavaScript in deinem #topbar Container die dazu gehörenden DIVs mit jeweils einer Datensatz-ID als DIV-ID. (Hier können dann auch gleich Ladebalken angezeigt werden)
    3. Iteriere mit jQuery durch die Rows und stelle jedes mal einen Ajax Request auf deine ursprüngliche Seite und lass dir jedes Mal nur das Ergebnis der einen ID ausgeben, die du per POST übergeben hast.
    4. Wenn das fertig ist, sind alle IDs geladen.

    Allerdings solltest du dir gut überlegen, ob das wirklich notwendig ist, da dies die Datenbankabfragen immens in die Höhe treibt.

    Wenn du deine bestehende Lösung behalten und nur das Schleifen-Enden-Problem lösen willst, versuche folgendes. Wenn du per Ajax den Inhalt deines PHP-Scriptes mit HTML Inhalt holst, füge doch einfach ans Ende des HTML Inhaltes einen kleinen JavaScript Block ein, der die doRequest Methode überschreibt:

    Quellcode

    1. function doRequest() {}


    ODER: Arbeite mit einer globalen Variable.

    Quellcode

    1. var loadRequest = true;
    2. function doRequest() {
    3. if (loadRequest) {
    4. $("#topbar").fadeOut('slow', function() {
    5. $.ajax({
    6. type: "GET",
    7. url: "ajax.php",
    8. cache: false,
    9. success: function(html){
    10. $("#topbar").html(html).show('slow',function() {
    11. setTimeout('doRequest()',1000);
    12. });
    13. }
    14. });
    15. });
    16. }
    17. }
    18. doRequest();
    Alles anzeigen


    und füge ans Ende des HTML-Inhaltes deines PHP-Scriptes einen JavaScript Block ein, der loadRequest auf false setzt.

    Hoffe ich konnte dir helfen!

    Grüße
    Bodo06
  • Hey Bodo,

    Vielen lieben Dank für deine Energie, qualitativ hochwertige Posts wie deinen kenne ich wirklich nur hier im Board, Respekt. Ich werde versuchen das von dir geschriebene a, zu verstehen, und dann b, umzusetzen, dauert allerdings sicherlich ein bisschen. Ich melde mich mit Rückfragen oder dem Ergebnis wieder :)

    so long,
    Matthias
    Das Leben ist binär - du bist eine 1, oder eine 0