Bin am Verzweifeln mit return

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

  • Bin am Verzweifeln mit return

    HALLO

    Ich mache eine Ajaxabfrage beim Speichern, ob die Mailadresse bereits im System vorhanden ist. Soweit so gut aber der return will eifach nicht klappen.
    Die Funktion rufe ich so auf
    Code:
    email_check();if (errM > 1){return false;}
    Die Funktion selber ist dann.
    Code:
    function email_check(){  
    if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (this.readyState == 4 && this.status == 200) {
    				 errM = JSON.parse(this.responseText);
    				if(errM > 1){document.getElementById("email_p").style.background = '#FFDFDF';}
    				 return errM;
    			}
            };
    		xmlhttp.open("GET","module/login/funktion.inc.php?mail="+document.getElementById("email_p").value+"&action=mail_abfrage",true);
    		xmlhttp.send();
    }
    Die Abfrage und der Rückgabe Wert funktionieren denn die Funktion if(errM ... wird ausgeführt.

    Das Problem ist das zwar der return geschiet aber, der Wert hinkt immer eins hinten nach. Sprich beim ersten Klick wird nichts retourniert und beim 2ten der wert aus dem ersten mal.
    Habe auch schon versuchet den Wert mit
    Code:
    errM=0;
    vorzugeben - ohne Erfolg.

    Wenn ich das ganze nun mit einer var mache
    Code:
     var errM = JSON.parse(this.responseText);
    dann hinkt der Wert nicht mehr hinterher, jedoch klappt dann der return nicht mehr. Sprich ich bekomme den Wert nicht zurück. Auch hier habe ich schon diverses ausprobiert - ohne Erfolg.

    Ich hoffe Ihr könnt mein Problem nachvollziehen und habt mir einen Tip um aus meiner verzweifelten Lage zu helfen.

    Besten DAnke

  • #2
    AJAX ist asynchron. Dein if wird zeitlich vor JSON.parse ausgeführt. Du müsstest eine Function als Parameter übergeben und diese nach JSON.parse ausführen.

    Oder besser und eleganter: Du verwendest ein Promise.

    Kommentar


    • #3
      Promise ist Browserabhänging, ich tendiere daher zur Funktion.
      Wie meinst Du das?
      Ich habe es nun einmal so versucht leider ohne Erfolg. Bin ich so auf dem Holzweg?
      Code:
              xmlhttp.onreadystatechange = function() {
                  if (this.readyState == 4 && this.status == 200) {
      				errM = JSON.parse(this.responseText);
      				if(errM > 1){document.getElementById("email_p").style.background = '#FFDFDF';}
      				returmail(errM);
      			}
              };
      Code:
      email_check();
      function returmail(errM){if (errM > 1){return false;}};
      Zuletzt geändert von sepp; 15.03.2018, 15:22.

      Kommentar


      • #4
        Zitat von sepp Beitrag anzeigen
        Promise ist Browserabhänging
        https://api.jquery.com/promise/

        Kommentar


        • #5
          Shit, ich wollte doch nur einen kleinen Wert zurückgeben, muss ich mir da echt so einen Aufwand für einen Wert machen?

          Warum geht das oben mit der Function nicht?

          Kommentar


          • #6
            Zitat von sepp Beitrag anzeigen
            Shit, ich wollte doch nur einen kleinen Wert zurückgeben, muss ich mir da echt so einen Aufwand für einen Wert machen?

            Warum geht das oben mit der Function nicht?
            Du machst dir irgendwie selber den Aufwand.

            Code:
            jQuery(function($) {
                $.getJSON('module/login/funktion.inc.php', {
                    mail: $('#email_p').val(),
                    action: 'mail_abfrage'
                }, function (result) {
                    if (result > 1) {
                        $('#email_p').css(backgroundColor: '#ffdfdf');
                    }
                });
            });
            Warum eigentlich dieser komische Sprachenmischmasch? module, funktion, login, mail_abfrage, usw.? Warum nicht einfach alles in Englisch?

            Ein return macht übrigens keinen Sinn. Vergiss das return.
            Zuletzt geändert von h3ll; 15.03.2018, 16:53.

            Kommentar


            • #7
              Danke für die Funktion, bringe sie zwar nicht zu funktionieren aber meine Funktion und die if mit dem Background geht ja, mein Problem ist der nächste Schritt, den Wert zurückzugeben an den ausgang der Funktion wo es aufgerufen wurde.
              Der Teil läuft auch so bei mir
              Code:
                      xmlhttp.onreadystatechange = function() {
                          if (this.readyState == 4 && this.status == 200) {
              				errM = JSON.parse(this.responseText);
              				if(errM > 1){document.getElementById("email_p").style.background = '#FFDFDF';}
              das macht probleme
              Code:
              return errM;
              P.S. Ich bin nicht so konsequent mit den Sprachen, da ich die Struktur auf Deutsch aufgebaut habe. Sorry

              Kommentar


              • #8
                So?

                Code:
                jQuery(function($) {
                    function email_check(success) {  
                        $.getJSON('module/login/funktion.inc.php', {
                            mail: $('#email_p').val(),
                            action: 'mail_abfrage'
                        }, function (result) {
                            if (result > 1) {
                                $('#email_p').css(backgroundColor: '#ffdfdf');
                            }
                            succes(result);
                        });
                    }
                    
                    email_check(function (result) {
                        alert('email_check result: ' + result);
                    });
                });

                Kommentar


                • #9
                  Nein ich möchte den Wert aus der Abfrage als var in die Function übergeben aus welcher die Function email_check gestartet wurde.
                  hier hin
                  Code:
                  function xy()
                  {
                    email_check();if (errM > 1){return false;}
                  }
                  Dein Code mit der Screibweise schaut sehr gut aus leider läuft das bei mir so nicht.

                  Kommentar


                  • #10
                    Zitat von sepp Beitrag anzeigen
                    Dein Code mit der Screibweise schaut sehr gut aus leider läuft das bei mir so nicht.
                    Naja, ohne zu wissen was bei dir passiert kann ich auch nix machen. Du musst schon ein nachvollziehbares Code-Beispiel posten.

                    Kommentar


                    • #11
                      In der Function xy passiert nur noch der Eintrag in die DB
                      Code:
                                $.ajax({
                                  type: 'post',
                                  url: str,
                                  data: $('#form_daten_'+frm).serialize(),
                                  success: function () {
                      showData(id);
                      
                      }
                      Also komplett
                      Code:
                      function sub(id,frm)
                      {
                      
                        email_check();if (errM > 1){return false;}
                       $.ajax({
                                  type: 'post',
                                  url: str,
                                  data: $('#form_daten_'+frm).serialize(),
                                  success: function () {
                      showData(id);
                      }
                      function email_check(){  
                      if (window.XMLHttpRequest) {
                                  // code for IE7+, Firefox, Chrome, Opera, Safari
                                  xmlhttp = new XMLHttpRequest();
                              } else {
                                  // code for IE6, IE5
                                  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                              }
                              xmlhttp.onreadystatechange = function() {
                                  if (this.readyState == 4 && this.status == 200) {
                      	errM = JSON.parse(this.responseText);
                      	[B]return errM;[/B]
                      			}
                              };
                      xmlhttp.open("GET","module/login/funktion.inc.php?mail="+document.getElementById("email_p").value+"&action=mail_abfrage",true);
                      		xmlhttp.send();
                      }
                      Zuletzt geändert von sepp; 15.03.2018, 20:49.

                      Kommentar


                      • #12
                        Der Code ist für mich unlesbar. Bitte sauber formatieren.

                        Kommentar


                        • #13
                          So besser?
                          Code:
                          function sub(id,frm,str)
                          {
                          email_check();
                          if (errM > 1){return false;}
                           $.ajax({
                                      type: 'post',
                                      url: str,
                                      data: $('#form_daten_'+frm).serialize(),
                                      success: function () {showData(id);}
                                     });
                          }
                          function email_check(){  
                          if (window.XMLHttpRequest) {
                                      // code for IE7+, Firefox, Chrome, Opera, Safari
                                      xmlhttp = new XMLHttpRequest();
                                  } else {
                                      // code for IE6, IE5
                                      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                                  }
                                  xmlhttp.onreadystatechange = function() {
                                  if (this.readyState == 4 && this.status == 200) {
                          	errM = JSON.parse(this.responseText);
                          	[B]return errM;[/B]
                          			}
                                  };
                                 xmlhttp.open("GET","module/login/funktion.inc.php?mail="+document.getElementById("email_p").value+"&action=mail_abfrage",true);
                          	xmlhttp.send();
                          }
                          Zuletzt geändert von sepp; 15.03.2018, 21:43.

                          Kommentar


                          • #14
                            Code:
                            jQuery(function ($) {
                                
                                function sub(id, frm, str) {
                                    email_check(function () {
                                        $.post(url, $('#form_daten_' + frm).serialize(), function () {
                                            showData(id);
                                        });
                                    });
                                }
                                
                                function email_check(success) {  
                                    $.getJSON('module/login/funktion.inc.php', {
                                        mail: $('#email_p').val(),
                                        action: 'mail_abfrage'
                                    }, function (result) {
                                        if (result > 1) {
                                            $('#email_p').css(backgroundColor: '#ffdfdf');
                                        } else {
                                            success();
                                        }
                                    });
                                }
                                
                            });

                            Kommentar


                            • #15
                              Mit gewissen Anpassungen an Deine Super Arbeit und Deinem Script, habe ich es nun endlich geschafft - Danke dafür, meine Nerven danken es Dir ebenso

                              Alles verstehe ich nicht ganz denn wenn ich mit Deiner Zeile arbeite
                              Code:
                              $('#email_p').css(backgroundColor: '#ffdfdf');
                              dann hängt sich das script auf, wenn ich es ersetze mit.
                              Code:
                              document.getElementById("email_p").style.background = '#FFDFDF';
                              klappt es.

                              Und das
                              Code:
                              jQuery(function ($) {
                              habe ich auch nicht verwendet.

                              Da muss ich nochmal über die Bücher jQuery(function ($) { verstehe ich noch nicht.

                              ABER ES LÄUFT - HEUREKA
                              Zuletzt geändert von sepp; 16.03.2018, 02:41.

                              Kommentar

                              Lädt...
                              X