Mit ajax kannst du per Javascript einen Request an den Server senden, dieser wertet den Request aus (z. B. per PHP) und liefert einen Rückgabewert und den bekommst du dann wieder im Javascript und kannst damit arbeiten. Man kann damit also nicht PHP-Skripte in Javascript ausführen, sondern von der Seite aus PHP-Skripte im Hintergrund anstoßen und ausführen lassen und mit deren Ergebnissen arbeiten.
Bei asynchron z.b. wird nur ein TEIL vom html geupdatet also nicht alles synchron ausgeliefert
Das stimmt, wenn überhaupt, nur teilweise. Asynchrone Requests bedeuten nicht zwangsläufig, dass irgendetwas geupdatet wird oder so, sondern lediglich, dass auf den Request nicht gewartet wird. Einen Ajax-Request kann man synchron oder asynchron nutzen.
Nutzt man ihn synchron, wartet Javascript mit seiner weiteren Abarbeitung, bis dieser Request beendet ist. Das kann zwar mitunter praktisch sein, aber wenn man einen Request startet, der z. B. 15 Sekunden lang dauert (auf PHP-Seite), dann hängt der Browser 15 Sekunden lang unnutzbar rum, weil er auf den Server wartet.
Nutzt man einen asynchronen Request, sendet Javascript den Request ab und arbeitet schon mal weiter. Dabei hängt der Browser nicht, allerdings muss man seinen Code entsprechend designen, damit man das Request-Ergebnis sinnvoll verwenden kann.
Beispiel 1 (mit jquery):
Code:
var testvariable = "test 1";
$.ajax({
url: "test.php",
async: false // der Request wird synchron ausgeführt
}).done(function() {
testvariable = "test 2";
});
alert(testvariable);
Hier wird auf den Request gewartet. Man sendet also den Request, während der läuft, ist der Browser nicht wirklich nutzbar und danach (z. B. nach 15 Sekunden, wenn der Request so lange dauert) wird per alert
"test 2" ausgegeben.
Beispiel 2 (mit jquery):
Code:
var testvariable = "test 1";
$.ajax({
url: "test.php",
async: true // der Request wird asynchron ausgeführt
}).done(function() {
testvariable = "test 2";
});
alert(testvariable);
Hier wird nicht gewartet. Der Request wird abgesendet und in den Hintergrund geschoben und direkt danach kommt schon der alert, allerdings wird er diesmal
"test 1" ausgeben, weil der Request ja noch nicht fertig ist. In diesem Beispiel würde die Variable also viel später mit "test 2" belegt, lange nachdem sie per alert() ausgegeben wurde. Das meine ich damit, dass man seinen Code entsprechend strukturieren muss, um mit dem Ergebnis zu arbeiten.