# Globale Variable für jQuery definieren und anwenden



## soezkan (27. Dezember 2013)

*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:


```
<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


----------



## tombe (28. Dezember 2013)

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.


----------



## abuzze (28. Dezember 2013)

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.


----------



## soezkan (28. Dezember 2013)

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:



abuzze hat gesagt.:


> 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


----------



## tombe (28. Dezember 2013)

Und was passiert wenn du die beiden IF-Anweisungen direkt so schreibst


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

und die Variable ganz weglässt?


----------



## soezkan (28. Dezember 2013)

Mit ...


```
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:


```
$( "#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:


```
$( "#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" ?


----------



## soezkan (28. Dezember 2013)

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!


```
$( "#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


----------

