HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS Probleme mit HTML5, Bootstrap oder jQuery ? |
 |
|

15-03-2018, 04:02
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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 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
|

15-03-2018, 11:57
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.769
|
|
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.
|

15-03-2018, 16:12
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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;}};
Geändert von sepp (15-03-2018 um 16:22 Uhr)
|

15-03-2018, 16:57
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.769
|
|
Zitat:
Zitat von sepp
Promise ist Browserabhänging
|
https://api.jquery.com/promise/
|

15-03-2018, 17:33
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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?
|

15-03-2018, 17:49
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.769
|
|
Zitat:
Zitat von sepp
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.
Geändert von h3ll (15-03-2018 um 17:53 Uhr)
|

15-03-2018, 18:25
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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
P.S. Ich bin nicht so konsequent mit den Sprachen, da ich die Struktur auf Deutsch aufgebaut habe. Sorry
|

15-03-2018, 18:38
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.769
|
|
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);
});
});
|

15-03-2018, 18:48
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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.
|

15-03-2018, 19:10
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.769
|
|
Zitat:
Zitat von sepp
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.
|

15-03-2018, 21:38
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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();
}
Geändert von sepp (15-03-2018 um 21:49 Uhr)
|

15-03-2018, 22:11
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.769
|
|
Der Code ist für mich unlesbar. Bitte sauber formatieren.
|

15-03-2018, 22:39
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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();
}
Geändert von sepp (15-03-2018 um 22:43 Uhr)
|

15-03-2018, 23:00
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.769
|
|
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();
}
});
}
});
|

15-03-2018, 23:57
|
sepp
Registrierter Benutzer
|
|
Registriert seit: Aug 2007
Beiträge: 301
|
|
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
Geändert von sepp (16-03-2018 um 03:41 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|