PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS (https://www.php-resource.de/forum/html-javascript-ajax-jquery-css-bootstrap-less/)
-   -   Bin am Verzweifeln mit return (https://www.php-resource.de/forum/html-javascript-ajax-jquery-css-bootstrap-less/106185-bin-am-verzweifeln-mit-return.html)

sepp 15-03-2018 03:02

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

h3ll 15-03-2018 10:57

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.

sepp 15-03-2018 15:12

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;}};


h3ll 15-03-2018 15:57

Zitat:

Zitat von sepp (Beitrag 674502)
Promise ist Browserabhänging

https://api.jquery.com/promise/

sepp 15-03-2018 16:33

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?

h3ll 15-03-2018 16:49

Zitat:

Zitat von sepp (Beitrag 674504)
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.

sepp 15-03-2018 17:25

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

h3ll 15-03-2018 17:38

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);
    });
});


sepp 15-03-2018 17:48

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.

h3ll 15-03-2018 18:10

Zitat:

Zitat von sepp (Beitrag 674508)
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.

sepp 15-03-2018 20:38

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);
        return errM;
                        }
        };
xmlhttp.open("GET","module/login/funktion.inc.php?mail="+document.getElementById("email_p").value+"&action=mail_abfrage",true);
                xmlhttp.send();
}


h3ll 15-03-2018 21:11

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

sepp 15-03-2018 21:39

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);
        return errM;
                        }
        };
      xmlhttp.open("GET","module/login/funktion.inc.php?mail="+document.getElementById("email_p").value+"&action=mail_abfrage",true);
        xmlhttp.send();
}


h3ll 15-03-2018 22:00

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();
            }
        });
    }
   
});


sepp 15-03-2018 22:57

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:44 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG