Globale Variable für jQuery definieren und anwenden

soezkan

Erfahrenes Mitglied
Gelöst: Globale Variable für jQuery definieren und anwenden

Hallo zusammen,

ich habe eine Anfängerfrage bzgl. Javascript / jQuery, und
hoffe die Frage ist nicht zu doof.

Mein jQuery soll meinem Formular ein "false" zurückgeben,
wenn eine der beiden AJAX-Aufrufe etwas zurückgibt, result.length > 0.
boolval dachte ich mir als globale Variable.
Irgendwie bleibt boolval = true aber immer true und das Formular wird
abgesendet.

Wie bekomme ich eine globale Variabel für folgendes Skript hin:

HTML:
<script>
var boolval = true;
$(document).ready(function() {
	$( "#register" ).on( "submit", function() {

		$.post('check.inc.php?name=username', { username: registrierungsformular.username.value },
		function(result) {
			if(result.length > 0) {
				boolval = false;
			}

			$('#username_feedback').html(result).show();
		});

		$.post('check.inc.php?name=password', { password: registrierungsformular.password.value },
		function(result) {
			$('#password_feedback').html(result).show();
			if(result.length > 0) {
				boolval = false;
				
			}
		});



                ...



		return boolval;
	});
});
</script>
<form id="register" name="registrierungsformular" method="post" action="index.php?site=registrierung">

...

Vielen Dank für Hilfe.
Liebe Grüße
Soezkan
 
Zuletzt bearbeitet:
Bist du dir sicher das es an der Variablen selbst liegt und nicht daran das die IF-Anweisung(en) nicht durchlaufen und der Inhalt der Variablen somit einfach nicht geändert wird?

Schreib doch einfach mal alert("FALSE"); oder etwas in der Art in den IF-Block damit du siehst das dieser Teil überhaupt ausgeführt wird.

Das das Formular abgeschickt wird, ist auch klar. Es wird ja an keiner Stelle im Code verhindert.
 
Die globale Variable wird schon wie erwartet gesetzt werden, du kannst sie aber nicht als Rückgabewert der submit-Funktion abgreifen.

$.post arbeitet asynchron, du hast daher noch nicht die Antwort vom Server wenn du den Rückgabewert lieferst.

Du musst also warten bis beide Antworten eingetroffen sind bevor du den erwarteten Wert von boolval abfragen kannst.
 
Danke für die Antworten.

Die if-Anweisung wird jeweils durchlaufen, dass habe ich mit einem alert('....'); geprüft.

Ziel:
  • boolval global als true definieren
  • wenn eine der beiden IFs false zurückgibt, nimmt boolval den Wert false an
  • $( "#register" ).on( "submit", function() ... wird nicht ausgeführt, da return boolvar=false

abuzze Du schreibst:

Du musst also warten bis beide Antworten eingetroffen sind bevor du den erwarteten Wert von boolval abfragen kannst.

Wie gehe ich da vor? Denn wie es aussieht setzte ich zwar innerhalb der function(result) die boolvar auf false, die Variable scheint aber eben nicht der globalen boolvar zu entsprechen, die ich am Skript-Anfang definiert habe.

Bin da echt ratlos ... Noch ne Idee wie ich das hinbekommen könnte?

Liebe Grüße
Soezkan
 
Und was passiert wenn du die beiden IF-Anweisungen direkt so schreibst

Javascript:
if(result.length > 0) {
    return false;
}

und die Variable ganz weglässt?
 
Mit ...

Javascript:
if(result.length > 0) {
    return false;
}

... wird das submit trotzdem ausgeführt. Die return sendet das false nur innerhalb des $.post
aber es wird kein return false an die umliegende Funktion gegeben:

Javascript:
$( "#register" ).on( "submit", function() {
        $.post('include/customers/check.inc.php?name=username', { username: registrierungsformular.username.value },
		function(result) {
			$('#username_feedback').html(result).show();
			if(result.length > 0) {
				return false;
			}
		});
->HIER MÜSSTE DAS FALSE EIGENTLICH LANDEN - TUTS ABER NICHT ;)
   ...
}

Mit dieser Logik klappt's ja, dass das Formular nicht abgeschickt wird:

Javascript:
$( "#register" ).on( "submit", function() {
      ...
      return false;
}
}

und meine Vermutung war auch zuerst, wie von Dir vorgeschlagen, einfach
return false in der obigen if ausführen - doch: Pustekuchen

... das Formular wird abgeschickt.

Komisch, komisch - wie kann ich mir den Wert nach "draußen saugen" ?
 
Ich habe es jetzt anders gelöst und zwar wie folgt.
Es ist zwar nicht die feinste Art wie ich das mache, aber dennoch: Es funktioniert! Hurra!

Javascript:
$( "#register" ).on( "submit", function() {
		var increment = 0;


		// Username
		res = $.ajax({
			  type: 'POST',
			  url: 'include/customers/check.inc.php?name=username',
			  data: { username: registrierungsformular.username.value },
			  async: false
		});
		if(res.responseText.length > 0) {
			$('#username_feedback').html(res.responseText).show();
			increment++;
		}
		else $('#username_feedback').html("").show();


		// Password
		res = $.ajax({
			  type: 'POST',
			  url: 'include/customers/check.inc.php?name=password',
			  data: { password: registrierungsformular.password.value },
			  async: false
		});
		if(res.responseText.length > 0) {
			$('#password_feedback').html(res.responseText).show();
			increment++;
		}
		else $('#password_feedback').html("").show();

		if(increment > 0) return false;
}

Danke auf jeden Fall für Eure Hilfe.

Liebe Grüße
Soezkan
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück