JS auf return warten?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JS auf return warten?

    hi!

    es gab schonmal ein thema dazu:

    http://www.php-resource.de/forum/htm...erzwingen.html

    aber so wie es beschrieben wurde, wartet JS auf das return und macht dann erst in der nächsten zeile weiter?

    das klappt aber nicht.

    ich habe ein postfach in dem mails (1 zeile = 1 datensatz) gelöscht werden.

    function....
    {
    eintragdel(testlink, poststring);

    seiteneuladen(link, parameter);

    ...
    }

    ich springe in die funktion eintragdel, dort wird per ajax die php datei zum löschen aufgerufen.

    in der eintragdel ist am ende ein "return;" drin.

    dann wird die seite vom postfach neu geladen (nach dem löschen)!

    machmal dauert die serverrückantwort länger von der funktion eintragdel.

    und seiteneuladen wird daher vorher schon ausgeführt.

    also kurz und knapp.
    JS wartet wohl doch nicht auf return ( sollte eigentlicherst nach dem zurück springen mit seiteneuladen weiter machen????)

    jemand eine idee wie ich das problem beheben könnte?

    ich möchte ungern in der "eintragdel" den funktionsaufruf "seiteneuladen" rein schreiben. denn das würd sich mächtig summieren. da ich viel JS auf meiner seite habe und die ajax funktion sich schnell aufblähen würde.

    DENN:

    wie in php ($aufzurunfendefunktion(ID,Nick), einen funktionsNAMEN per Variabler, kann ich in JS nicht machen, stimmts?

    denn sonst könnte ich ja das so machen:

    eintragdel(testlink, poststring, funktionsnamederdannaufgerufenwird);

    aber das ist nicht möglich oder liege ich da falsch?

  • #2
    du könntest das neuladen als bei erfolgreichem ausführen von ajax zu verwendende funktion definieren.

    allerdings ergibt sich mir der sinn nicht wirklich, den du darin siehst, einen ajaxzugriff zu starten, um dann gleich hinterher die seite doch neu zu laden. genau das möchte man mit ajax i.d.R. verhindern, sonst könntest du das löschen doch gleich in einem schwung mit einem pagereload abfertigen. verstehste? ;-)
    mein vorschlag wäre, du löscht per ajax die nachricht einerseits tatsächlich, wie du es bisher machst. um die nachricht andererseits aus dem sichtbereich des benutzers zu nehmen und damit den "löscheffekt" zu unterstreichen, kannst du das DOM entsprechend manipulieren. also z.b. den link zur nachricht entfernen.

    Kommentar


    • #3
      Zitat von Gamer20 Beitrag anzeigen
      also kurz und knapp.
      JS wartet wohl doch nicht auf return
      Kurz und knapp: Mach dir bitte klar, wofür das erste A in AJAX steht.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        ja ich weiß worfür das A steht.

        das mit dem postfach war nur ein sehr einfaches beispiel.

        naja die ganz seite will ich ja net neu laden, hatte das falsch beschrieben. eigentlich lade ich nur ein größeres DIV neu, welches die datensätze enthält.

        klar könne ich beim postfach das einfach ausblenden.

        mein gedanke war aber, das das erst passieren soll, wenn die serveranfrage vollständig war.
        nicht der das der nutzer sieht das es weg ist und der server das aber nicht gelöscht hat, da es z.b. serverprobleme gibt.

        dann wäre der eintrag das nächste mal wieder da.


        deswegen sollte, erst nach dem löschen alles weiter verarbeitet werden.

        hmm ich könnte per timer aller 200ms prüfen ob return ein wert enthält und im notfall nach 3 sek. abbrechen und fehlermeldung ausgeben lassen, das es serverprobleme gibt.

        also seiteneuladen oder fehlermeldung.

        oder wäre das eine verdammt hässliche programmierungsweise?

        naja im notfall muß ich es doch so machen.


        ajaxaufruf

        Code:
        switch (http_request.readyState)
        {
        case 4:
        
        if (http_request.readyState == 4 && http_request.status == 200)
        {
        
        //wenn erfolgreich funktion neu laden hier aufrufen
        // problem nur wenn es viele funktionen werden (weil ich ajax sehr oft benötige, die nach ajax aufgerufen werden
        
        if(Funkt==1) {seiteneuladen(link, parameter);;}
        if(Funkt==2) {JSblockladen();}
        if(Funkt==3) {JSslideladen();}
        
        usw.
        
        das wäre ja sehr schlechte programmierung (denke ich).
        
        }

        Kommentar


        • #5
          Zitat von Gamer20 Beitrag anzeigen
          ja ich weiß worfür das A steht.
          Dann aber offenbar nicht, was es bedeutet für das Script.

          oder wäre das eine verdammt hässliche programmierungsweise?
          Mit einem Timer – ja.

          das wäre ja sehr schlechte programmierung (denke ich).
          Nein, wäre es nicht.

          Eventbasiert ist genau die richtige Vorgehensweise bei AJAX.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            hmm ok das letzte beispiel habe ich schon früher realisiert. aber ich habe jetzt 11 zeilen mit unterschiedlichen funktionsaufrufen.

            hmm schade das JS so unflexibel ist, was funktionsnamen per variabler anbelangt.

            aber ich komme da wohl nicht drum herum.

            danke für die hilfe!

            Kommentar


            • #7
              Mein Senf: Ob der Löschvorgang erfolgreich war oder nicht, braucht man nicht durch Neuladen der übrigen Ergebnisse zu überprüfen. Nach der REST-Philosophie würde man stattdessen erfolgsabhängige HTTP-Status-Codes verwenden, z. B. bei Erfolg 204 oder 200, bei Fehlern 403, 404 oder 409.

              Was meinst du mit unflexibel? Natürlich kann man in JS Funktionasnamen per Variable übergeben!
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Oder du baust dein Ajax so auf das es im weitesten Sinne nicht mehr Asynchron läuft.
                Ich hab bei manchen Fälle auch solch Probleme gehabt.
                Da ging es allerdings darum das ich Werte vom Server brauchte für die weitere Verarbeitung im JS.
                Im großen und ganzen lief dann der übrige Skriptablauf dann erst weiter wenn es ein "return" gab.

                Kommentar


                • #9
                  das mit den statuscodes ist mir klar.

                  nur wenn ich in der hauptfunktion in ajax rein springe und in der hauptfunktion 1 zeile weiter drunter in in die funktion "neuladen" rein springe:

                  funktion{}

                  ajaxaufruf();
                  neuladen();

                  UND ajax länger braucht UND JS schon in der neuladen drin ist (weil es nicht auf das return wartet von ajax). bringt mir die statuscodeabfrage auch nicht viel.

                  wäre ja umständlich die divs wieder einblenden zu lassen.

                  das ist ja mein problemchen.

                  also muß ich in der ajaxfunktion dort erst den funktionsaufruf "neuladen" einbauen.

                  bei 1 funktion ist das ja kein thema, aber ich habe ja einige funktionen und dann würde die ajaxfunktion sich langsam aufblähen mit lauter funktionsaufrufen). so eine art "liste" wollte ich vermeiden, denn die habe ich ja gerade drin.

                  ich wollte meine scripte massiv kürzen.

                  Kommentar


                  • #10
                    Ein AJAX-Aufruf wird immer* länger dauern und Code der darauf folgt wird immer ausgeführt werden, bevor der Response da ist. Offenbar hast du das mit dem „asynchron“ noch nicht verstanden. Nutze Callbacks oder arbeite halt synchron, wenn du den Code so lassen willst.

                    Edit:
                    Zitat von Gamer20 Beitrag anzeigen
                    also muß ich in der ajaxfunktion dort erst den funktionsaufruf "neuladen" einbauen.
                    Oder du übergibst den Callback einfach an deine AJAX-Funktion.

                    ___
                    * Falls jetzt jemand davon anfängt, dass es im Synchron-Modus nicht so ist, ich spreche von „AJAX“.
                    Zuletzt geändert von AmicaNoctis; 14.09.2011, 14:03.
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Pseudo-Code:
                      Code:
                      reload({
                          onComplete: function() {
                              // do something after reload
                          }
                      });

                      Kommentar


                      • #12
                        Zitat von Gamer20 Beitrag anzeigen
                        hmm schade das JS so unflexibel ist, was funktionsnamen per variabler anbelangt.
                        Ich kann nur vermuten, was du damit jetzt wieder meinst …

                        Aber so wie’s aussieht ist wohl eher schade, dass du immer noch so wenig Ahnung davon hast.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar

                        Lädt...
                        X