Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Jquery Ajax Rückgabewert weiterverwenden

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Jquery Ajax Rückgabewert weiterverwenden

    Hi, ich habe folgenden Code:

    var how_many = "";
    $.ajax({
    type: "POST",
    url: "/ajax_add_selected_product_to_session.php",
    success: function(msg){
    /* add here what to do on success */
    //alert(msg);
    how_many = msg;
    //alert(how_many);
    }
    });

    Wenn ich jetzt (also ausserhalb der Ajax function) zum Beispiel ein
    alert(how_many);
    mache, ist der Wert leer. Er müsste aber eine 2 zurückgeben. Gebe ich innerhalb der function den Wert aus, gibt er mir auch das richtige Ergebnis zurück.

    Ich brauche den Wert, um ihn in einer weiteren if/else Angelegenheit überprüfen zu können.
    Sicher nur ein Denkfehler, oder? Oder wie komme an den Wert aus how_many?

    Danke und Gruß
    Heohni

  • #2
    Hi Heohni,
    wahrscheinlich greifst du zu einem zeitpunkt auf how_many zu, zu dem der neue Inhalt noch garnicht gesetzt wurde. Also bevor die success-Funktion überhaupt aufgerufen wurde.

    Abhängig davon, was genau du da machen möchtest bieten sich dann verschiedene Lösungen an. Zum Beispiel kannst du den Request synchron ausführen (async:false) oder alles innerhalb der success-Funktion abhandeln...
    [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

    Kommentar


    • #3
      Hi,

      inzwischen habe ich es geändert und wirklich alles in success teil verlegt.

      meine Funktion schaut derzeit so aus:
      $(document).ready(function() {
      var howmanyfromsession = "";
      var howmanyonpage = $("input[name^='paradigm']:checked").length;
      $.ajax({
      type: "POST",
      url: "/ajax_add_selected_product_to_session.php",
      success: function(msg){
      /* add here what to do on success */
      //alert(msg);
      howmanyfromsession = msg;

      if (howmanyfromsession == 1){
      $(".amount").append(' (Derzeit ist ' + howmanyfromsession + ' Produkt vorgemerkt)');
      }else if(howmanyfromsession > 1){
      $(".amount").append(' (Derzeit sind ' + howmanyfromsession + ' Produkte vorgemerkt)');
      }

      if(howmanyonpage == 0 && howmanyfromsession == 0) {
      //alert('None are checked on page');
      $(".requestbutton").attr("disabled", "disabled");
      }else if(howmanyonpage == 0 && howmanyfromsession > 0){
      //alert('At least one is checked');
      $(".requestbutton").removeAttr("disabled");
      $(".requestbutton").click(function(){
      $("#list").submit();
      });
      }

      $(".requestbutton").click(function(){
      if($("input[name^='paradigm']:checked").length > 0) {
      $("#list").submit();
      }
      });
      }
      });
      });

      Hierzu noch eine Frage.
      Der Code oben, wird ja immer ausgeführt, wenn die Seite neu geladen ist.
      ich würde aber gerne das so schreiben, das daraus eine eigen function wird, die bei Bedarf, bzw. einzelnen anderen Events auch aufrufen kann.

      Kurz zusammengefasst, habe ich hier eine Liste von Produkten. Jeder Eintrag kann per check box ausgewählt werden. Mit meinem Code oben prüfe ich, welche Produkte ich vorher schon ausgewählt habe und diese entsprechend zu kennzeichnen und eine Meldung auszugeben, wie viele Produkte derzeit ausgewählt sind. Funktioniert ein bisschen wie das Warenkorb Prinzip.

      Wenn ich jetzt aber auf ein Produkt einzeln klicke, um es ab oder auszuwählen, möchte ich die Statusmeldung natürlich auch aktualisieren. Dazu müsste ich das oben nochmals aufrufen.

      Wie kann ich das machen? Ohne den Code in das neue Event zu duplizieren?

      Kommentar


      • #4
        Das ganze ist schon eine Funktion. Du kannst sie jetzt noch in einer Variable ablegen:
        Code:
        var myHandler = functino(){ 
        //mach was
        };
        myHandler(); // ruft das ganze auf
        $('#blub').click(myHandler); // wird jetzt bei Klick aufgerufen...
        Dann solltest du aber in der Funktion nicht mehr mit append() arbeiten, da dort sonst doppelt und dreifach "Derzeit ist xyz" steht.

        P.S. Bitte verwende dochin Zukunft die [ code] [/ code]-Tags des Forums wennd u Quelltext postest.
        [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

        Kommentar


        • #5
          Ok, das schaue ich mir mal an! Danke!
          Auch danke für den [ code ] Hinweis!

          Kommentar


          • #6
            Funktioniert, herzlichen Dank!

            Kommentar

            Lädt...
            X