Ajax

      Hey leute!

      Ich fange grade mit Ajax an.
      Aus der Vergangenheit weiß ich, dass man oft sehr viel intensiver und erfolgreicher lernen kann wenn man das gelernte gleich reproduziert ;)
      deswegen dieses kleine Tutorial.
      (copyright liegt bei chaim dönnewald - bei verwendung bitte angeben :) danke)
      Es soll zum einen andern - die sich auch mit Ajax beschäftigen - die möglichkeit geben, einen Einblick u gewinnen und mir selbst abei helfen das gelernte zu verinnerlichen.

      Ich habe mir vorgenommen regelmässig ein bisschen Ajax zu lernen (vielleicht schaffe ich es ja täglich) und hier meine fortschritte in tutorialform zu dokumentieren.

      WEnn sich außer mir auch jemand mit Ajax beschäftigt, würde ich micht echt freuen wenn ihr eurer wissen hier beisteuret :D
      so und nun los
      Lektion 1 8)

      1. Was ist Ajax?
      Ich hasse ja eigentlich solche Einleitung aber na ja ein bisschn "Theoriewissen" sollte vielleiht auch ab und an sein :) Ajax ist eine abkürzung für
      * Asyncronous
      * JavaScript
      * and
      * XML

      Ajax stellt eine Kombination aus länger existierenden Technologien da. JavaScript wird benutzt um im Browser des Client eine Anfrage zum Server zu stellen. Wenn diese Anfrage vom Server bearbeitet wurde, wird eine Funktion beim Client ausgeführt. Die Nachrichten die der Server verschickt, sind hierbei oft in XML codiert. Die Codierung in XML ist jedoch nicht zwingen, es kann auch eine Codierung als simpler Text erfolgen. XML bietet sich aber an um einen standardisierten Mechanismus zum parsen von Daten zu haben.

      Wie oben bereits erwähnt, führt der Server etwas aus und sendet eine Antwort als XML Dokument. Die Implementierung auf der Serverseite kann in einer beliebigen Programmier oder Skriptsprache realisiert werden. In diesem Tutorial und den Schaubildern verwende ich jedoch PHP als serverseitige Skriptsprache.

      Da die Anforderung vom Browser des Benutzers über JavaScript ausgelöst wird und mit JavaScript auch die Verarbeitung der Antwort erfolgt, ist kein Reload der Webseite notwendig. In modernen Webandwendungen wird diese Technologie gerne benutzt, um ein ähnliche Verhalten der Anwendung wie bei einer herkömlichen Desktopanwendung zu realisieren.

      Da ein gewisser Teil des Codes von Ajax Anwendungen immer ähnlich ist, gibt es im Internet einige Frameworks die die Programmierung von Ajax Anwendungen erleichtern wollen.
      (Quelle: admin-wissen.de/tutorials/eige…rial/einfuehrung-in-ajax/)

      Hier habe ich ein ein Beispiel auf englisch gefunden: sematopia.com/?p=34

      Dieses wollte ich nun genauer erklären :)
      (es wird darauf hingewiesen, dass das Beispiel nur im firefox geht... laut drweb.de soll es aber auch im IE geben, wenn man javascript anpasst)

      zum testen hab ich das ganze mal hier installiert:
      kayela.de/ajax

      Wir ihr seht, sind auf der Seite 2 verschiedene Arten darsgestellt um zwei Zahlen miteinder zu multiplizieren.

      Die klassische Methode mit PHP

      -> Beide zahlen werden innerhalb einer Funktion miteinander multipliziert und das ergebnis im nebenstehenden feld angezeigt

      Die Ajaxmethode:
      im prinzip das selbe, der unterschied die webseite muss nicht neu geladen werden !!!

      So gehen wir mal den Code durch :)

      Die index.php Datei.

      PHP-Quellcode

      1. include("ajaxClass.php");
      2. $objSem = new ajax;
      3. $objSem->readURLParameters();
      4. $objSem->staticExample();
      5. echo $objSem->result;


      Die Klasse ajaxClass.php wird geladen.

      (Der Rest der Index.php steht etwas weiter unten)

      Nun kommt ein wenig OOP Objekt orientierte Programmierung
      Eine neue Instanz der Klasse Ajax wird erzeugt und die beiden funktionen readURLParameters(); und staticExample(); werden bearbeitet. am ende wird das ergebnis ausgegeben.

      So die Funktionen findet ihr wo?
      Natürlich in der ajaxClass.php :)

      hier der Code:

      PHP-Quellcode

      1. <?php
      2. class ajax {
      3. var $queryParam = array();
      4. var $result = 0;
      5. var $num1 = 0;
      6. var $num2 = 0;
      7. function readURLParameters() {
      8. $qstr = explode("&", $_SERVER['QUERY_STRING']);
      9. foreach ($qstr as $value) {
      10. $paramVal = explode("=",$value);
      11. if (array_key_exists(1,$paramVal)) {
      12. $this->queryParam[$paramVal[0]] = $paramVal[1];
      13. }
      14. }
      15. }
      16. function staticExample() {
      17. if (array_key_exists("num1",$this->queryParam) & array_key_exists("num2",$this->queryParam)) {
      18. $this->result = $this->queryParam["num1"] * $this->queryParam["num2"];
      19. $this->num1 = $this->queryParam["num1"];
      20. $this->num2 = $this->queryParam["num2"];
      21. }
      22. }
      23. }
      24. ?>


      Sooo dann gehen wir mal schritt für schritt durch

      Also erstmal hier findet ihr die beiden Funktionen die erste liest die Parameter aus der URL aus

      --> Bei der Abfragae über das PHP Beispiel werden die eingegebenen Werte in die URL übertragen, diese müssen dann noch vom Skript wieder aus der URL ausgelesen werden um verarbeitet werden zu können! Dies tut diese Funktion!
      Ich werde jetzt nicht näher auf diese Funktion eingehen, weil es sich dabei nur um PHP handelt :)

      Funktion 2
      staticExample

      wie dr Name schon sagt, ist sie für das Standard Beispiel zuständig, also das Beispiel mit PHP
      hier brauch ich wohl auch nicht näher drauf eingehen? Im Prinzip multipliziert sie nur auf klassischem wege also zahl1 * zahl2 und speichert das ergebnis in einer neuen Variable

      so um nochmal auf die Index.php zurück zu kommen :)
      der restliche code

      HTML-Quellcode

      1. <html>
      2. <script src="ajax.js" type="text/javascript"></script>
      3. <body>
      4. <br><br>
      5. <p>AJAX Example:</p>
      6. <form name="form1" action="" onsubmit="return ajax_call()">
      7. <input type="text" name="num1" id="num1"></input> *
      8. <input type="text" name="num2" id="num2"></input> =
      9. <input type="text" name="result" id="result"></input>
      10. <br><br>
      11. <input type="submit" name="semajax" value="AJAX"></input>
      12. </form>
      13. <!-- -->
      14. <br><br>
      15. <p>Standard Example:</p>
      16. <form name="form1" action="index.php">
      17. <input type="text" name="num1" id="num1" value=<? echo $objSem->num1 ?>></input> *
      18. <input type="text" name="num2" id="num2" value=<? echo $objSem->num2 ?>></input> =
      19. <input type="text" name="result" id="result" value=<? echo $objSem->result ?>></input>
      20. <br><br>
      21. <input type="submit" name="semajax" value="Standard"></input>
      22. </form>
      23. </body>
      24. </html>


      Das meiste ist ja üblicher HTMl Code dürfte also nicht so schwer sein :)
      wichtig ist:
      Die ajax.js Datei wird geladen
      Es werden zwei formulare erstellt (im PHP Formular werden die eingegeben werte - sofern vorhanden - als standardwerte eingetragen)

      und:
      Das Standardformular schickt die Eingaben an die Seite !
      Deswegen wird die Page neu geladen !
      Das Ajax Formular hingegen sendet die Eingaben an die Funktion return ajax_call()

      Die eigentliche Ajax datei
      hier die ajax.js

      Quellcode

      1. var xmlhttp=false;
      2. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      3. xmlhttp = new XMLHttpRequest();
      4. }
      5. function ajax_call() {
      6. xmlhttp.open("GET", 'ajaxWork.php?num1=' +
      7. document.getElementById('num1').value +
      8. '&num2=' + document.getElementById('num2').value , true);
      9. xmlhttp.onreadystatechange=function() {
      10. if (xmlhttp.readyState==4) {
      11. document.getElementById('result').value = xmlhttp.responseText;
      12. }
      13. }
      14. xmlhttp.send(null)
      15. return false;
      16. }


      Ok wahrscheinlich gehts euch so wie mir und das ganze sieht auf den ersten Blick zwar irgendwie vertraut (Die Syntax kennt man ja auch Javascript) aber dennoch verwirrend aus :D
      deswegen eins nach dem anderen

      Zuerst wird die Variable var xmlhttp auf false gesetzt
      ich hab dann auch gleich mal gegoogled und folgendes ist heraus gekommen 8)
      de.wikipedia.org/wiki/XMLHttpRequest

      Hier wird erklärt worum es geht
      ich fasse mal eben zusammen

      XMLHttpRequest ermöglicht einem Skript einer Webseite, Daten dynamisch vom Webserver abzurufen, ohne dass dazu die Seite neu geladen werden müsste

      Das haben wir ja in unserem Beispiel

      Da XMLHttpRequest Anfragen asynchron verarbeiten kann, muss ein Script nicht warten, bis die Anfrage beantwortet ist, sondern kann solange andere Aufgaben abarbeiten.

      Da spart man ja richtig Zeit :)

      Trotz der guten Verfügbarkeit der API in neueren Browsern wird an ihr auch Kritik geübt, da es schwierig ist, Webseiten, die XMLHttpRequest einsetzen, auch älteren Browsern in vollem Umfang zugänglich zu machen. (...) Ein weiterer Kritikpunkt ist, dass sich Web-Anwendungen, die auf XMLHttpRequest setzen, nur schwer barrierefrei umsetzen lassen.

      Aus meiner Sicht beides nicht unwichtige Kritikpunkte. Bei Punkt eins sage ich mal: Es kommt auf die Zielgruppe an, wenn man Ajax auf einer Tutorialpage o.ä. anwenden will kannman eigentlich davon ausgehen, dass die Besuhcer über neuere Browser etc verfügen...


      Quellcode

      1. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      2. xmlhttp = new XMLHttpRequest();
      3. }


      Wenn also die Variable xmlhttp leer ist und XMLHttpRequest noch nicht definiert wurden:

      Wird der Variable xmthttp eine neue instanz der klasse XMLHttPRequest zugeteilt.
      Dabei handelt es sich um eine vorgefertigte klasse (müsste so sein oder?)
      Wenn ich das richtig verstanden habe ist ja XMLHttpRequest die Anfrage die an das Skript gesendet wurde, also speichert die Variable xmlhttp nun alle eingaben


      Quellcode

      1. function ajax_call() {
      2. xmlhttp.open("GET", 'ajaxWork.php?num1=' +
      3. document.getElementById('num1').value +
      4. '&num2=' + document.getElementById('num2').value , true);
      5. xmlhttp.onreadystatechange=function() {
      6. if (xmlhttp.readyState==4) {
      7. document.getElementById('result').value = xmlhttp.responseText;
      8. }
      9. }
      10. xmlhttp.send(null)
      11. return false;
      12. }

      Hier nun endlich das Herzstück der Arbeit :D
      Die Funktion ajax_call

      1. Sie öffnet aus der Variablen xmlhttp (die ja die Anfrage speichert) die Werte aus dem Formular die sich in den Feldern num1 und num2 und multipliziert sie miteinander
      2. "onreadystatechange"

      Dazu:
      An dieser Stelle muss man dem HTTP Request-Objekt lediglich mitteilen, welche JavaScript-Funktion die Antwort abarbeiten soll. Dies erreicht man, indem man die onreadystatechange-Eigenschaft des Objektes genauso nennt wie die JavaScript-Funktion, welche man benutzen möchte (...)
      (developer.mozilla.org/de/docs/AJAX:Getting_Started)

      Dieser teil hier if (xmlhttp.readyState==4) { prüft ob die xmlhttp überhaupt VOLLSTÄNDIG ist (siehe dazu einfach wieder developer.mozilla.org/de/docs/AJAX:Getting_Started )
      Wenn alles klappt sendet er danach alles wieder an das Formular dabei ird der wert von "result" auf das ergebnis gesetzt

      und vóila :D


      so und das war vielleicht etwas trocken.... ;) deswegen kommt im nächsten beitrag etwas selbst erprobtes :D




      Kommentare, Fragen, Korrekture, Ergänzungen?
      Mein Blog
      Facebook
      Twitter

      Ich freue mich immer über Nachrichten. Falls ihr über einen Facebookaccount verfügt, ist ratsamer mich darüber zu kontaktieren, weil ich diese Nachrichten i.d.R. schneller beantworte.
      So nun Teil 2
      Ein kleines Beispiel
      dieses basiert auf den erfahrungen die ich hier: developer.mozilla.org/de/docs/AJAX:Getting_Started gesammelt habe :)

      In dem Beispiel möchte ich ein HTML Dokument auslesen und den Inhalt in einem Alert wiedergeben.

      Was müssen wir also tun?
      Wir erstellen auf jedenfall schonmal eine Funktion, die den Inhalt aus der Datei ausliest
      und eine weitere Funktion, die diesen Inhalt in das Fensterchen schreibt :)
      Über einen Link, button oder auch unaufgefordert wird der alert dann geöffnet.

      Wir brauchen also diesmal
      * Ein ganz normales HTML Dokument
      * Ein html dokument (z.b. test.html) mit dem Text der aufgerufen werden soll - legt dieses dokument im selben verzeichnis ab wie das skript oder gleicht den link im funktionsaufruf an :)

      Im Headbereich arbeiten wir mit Javascript:

      Zuerst setzen wir http_request auf false!

      ---> Was st das nochmal?
      Später implementierten Mozilla, Safari und andere Browser eine Klasse namens XMLHttpRequest, welche die Methoden und Eigenschaften des originalen ActiveX-Objektes von Microsoft unterstützt.
      (developer.mozilla.org/de/docs/AJAX:Getting_Started)
      In der Variable wird also später gespeichert um welches "objekt" es sich handlt.. damit es nicht zu problemen mit verschiedenen Browsern kommt.

      Quellcode

      1. if (window.XMLHttpRequest) { // Mozilla, Safari,...
      2. http_request = new XMLHttpRequest();
      3. if (http_request.overrideMimeType) {
      4. http_request.overrideMimeType('text/xml');
      5. // zu dieser Zeile siehe weiter unten
      6. }
      7. } else if (window.ActiveXObject) { // IE
      8. try {
      9. http_request = new ActiveXObject("Msxml2.XMLHTTP");
      10. } catch (e) {
      11. try {
      12. http_request = new ActiveXObject("Microsoft.XMLHTTP");
      13. } catch (e) {}
      14. }
      15. }


      Zuerst haben wir die Variable http_request auf false gesetzt, damit sie leer ist - so können wir sie danach mit dem inhalt füllen, den wir benötigen :)

      Hier wird eine Abfrage durchgeführt, die überprüft welcher Browser verwendet wird.
      Wird das XMLHttpRequest verwendet, handelt es sich um Mozilla, Safari etc etc etc. Falls wirklich jemand das ActiveXObject verwendet muss er ein IE User sein (steinigt ihn, nein spaß ;))

      Hierzu ein kleiner Exkurs :)

      kayela.de/ajax/beispiel1.htm

      Eine kleine Abfrage ob man einen Ie hat... ich konnte sie lleider bisher nur im Firefox testen, deswegen würde ich mich freuen wenn sich ein paar IE Nutzer nicht angegriffen fühlen, sondern auch mal testen ;)danke

      hier der Code mit erklärung

      Quellcode

      1. <script type="text/javascript" language="javascript">
      2. var http_request = false;
      3. function browser() {
      4. http_request = false;
      5. if (window.XMLHttpRequest) { // Mozilla, Safari,...
      6. http_request = new XMLHttpRequest();
      7. if (http_request.overrideMimeType) {
      8. http_request.overrideMimeType('text/xml');
      9. alert('Nein hast du nicht :D');
      10. // zu dieser Zeile siehe weiter unten
      11. }
      12. } else if (window.ActiveXObject) { // IE
      13. try {
      14. http_request = new ActiveXObject("Msxml2.XMLHTTP");
      15. alert('ja..... auf zur steinigung');
      16. } catch (e) {
      17. try {
      18. http_request = new ActiveXObject("Microsoft.XMLHTTP");
      19. alert('ja..... auf zur steinigung');
      20. } catch (e) {}
      21. }
      22. }
      23. }
      24. </script>
      25. <font onclick="browser()">Habe ich einen Internet Explorer?</font>


      Es gibt eine Funktion sie heißt.... (wär hätts gedacht) BROWSER

      Hier wird die Abfrage gestartet die ich schon oben erwähnt hatte :D
      Wenn sie als Ergebnis ergibt, dass der User IE nutzt, gibt sie einen Alert aus, der ihm das sagt ;)
      Nutzt er einen anderen Browser bekommt der User den Alert, dass er keinen IE nutzt.

      Die ganze Funktion wird über onclick aufgerufen.
      Das ganze geht auch mit einem normalen Link

      Quellcode

      1. <a href="javascript:browser();">Test mit link</a>

      hierbei ist zu beachten, dass man bei href noch JAVASCRIPT erwähnen muss =)


      So nun wieder zurück zum Topic

      Wenn wir abgefragt haben, welcher Browser verwendet wird und das Objekt, as verwendet wir in http_request gespeichert wurde, machen wir eine kleine Fehlermeldung :)für den Fall, dass der Browser nicht erkannt wurde oder ähnliches.
      Wir prüfen ob http_request IMMERNOCH leer ist (wir haben die Variable ja vor der abfrage auf false gesetzt. Bei der Abfrage wurde sie - wenn alles geklappt hat - mit einem bestimmten wert gefüllt)

      Quellcode

      1. if (!http_request) {
      2. alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
      3. return false;
      4. }
      5. http_request.onreadystatechange = alertInhalt;
      6. http_request.open('GET', url, true);
      7. http_request.send(null);


      Also if(!http_request) { // ist die variable leer?
      wenn ja wird eine Fehlermeldung zurückgegeben :D

      Wenn dieser Teil abgeareitet wurde, werden die Sachen, die wir schon erarbeitet hatten in der Funktion alert gespeichert
      siehe dazu uach hier:

      http_request.onreadystatechange = nameDerFunktion;

      Es ist zu beachten, dass nach dem Funktionsnamen keine Klammern auftauchen und der Funktion keine Parameter übergeben werden. Des weiteren kann man anstelle der Angabe eines Funktionsnamens die Funktion "on the fly" definieren (...)


      Danach muss der Request wieder abgesetzt werden
      (...)Dazu ruft man die Methoden open() und send() der HTTP-Request Klasse auf (...)


      Quellcode

      1. http_request.open('GET', url, true);
      2. http_request.send(null);



      So und nun kommen wir zur zweiten Funktion!
      die alertinhalt ()

      Quellcode

      1. function alertInhalt() {
      2. if (http_request.readyState == 4) {
      3. if (http_request.status == 200) {
      4. alert(http_request.responseText);
      5. } else {
      6. alert('Bei dem Request ist ein Problem aufgetreten.');
      7. }
      8. }
      9. }


      so und zur guter letzt müssen wir das ganze noch aufrufen :)ich denk mal das schafft ihr auch ohne weitere erkklärungen ich habs ja oben schonma beschrieben ;)

      Hier der gesamte Code:

      Quellcode

      1. <script type="text/javascript" language="javascript">
      2. var http_request = false;
      3. function macheRequest(url) {
      4. http_request = false;
      5. if (window.XMLHttpRequest) { // Mozilla, Safari,...
      6. http_request = new XMLHttpRequest();
      7. if (http_request.overrideMimeType) {
      8. http_request.overrideMimeType('text/xml');
      9. // zu dieser Zeile siehe weiter unten
      10. }
      11. } else if (window.ActiveXObject) { // IE
      12. try {
      13. http_request = new ActiveXObject("Msxml2.XMLHTTP");
      14. } catch (e) {
      15. try {
      16. http_request = new ActiveXObject("Microsoft.XMLHTTP");
      17. } catch (e) {}
      18. }
      19. }
      20. if (!http_request) {
      21. alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
      22. return false;
      23. }
      24. http_request.onreadystatechange = alertInhalt;
      25. http_request.open('GET', url, true);
      26. http_request.send(null);
      27. }
      28. function alertInhalt() {
      29. if (http_request.readyState == 4) {
      30. if (http_request.status == 200) {
      31. alert(http_request.responseText);
      32. } else {
      33. alert('Bei dem Request ist ein Problem aufgetreten.');
      34. }
      35. }
      36. }
      37. </script>
      38. <span
      39. style="cursor: pointer; text-decoration: underline"
      40. onclick="macheRequest('test.html')">Einen Request absetzen
      41. </span>


      Anmerkung: bei mir funktioniert nur online ! Ich weiß aber nicht ob es an mir liegt oder am skript... wenn jemand anders es schafft das ding offline zum laufen zu bringen würd ich mich über ne meldung freuen :Ddanke

      Die Zitate stammen alle von developer.mozilla.org/de/docs/AJAX:Getting_Started
      Mein Blog
      Facebook
      Twitter

      Ich freue mich immer über Nachrichten. Falls ihr über einen Facebookaccount verfügt, ist ratsamer mich darüber zu kontaktieren, weil ich diese Nachrichten i.d.R. schneller beantworte.
      So Teil 3 - ich glaube so langsam, dass Ajax süchtig macht...

      ich habe vorhin eine kleine Datei gebastelt, die ich euch zu allererstmal zeigen möchte hier findet ihr sie:
      kayela.de/ajax/beispiel3.htm

      Hier erstmal der Code:

      HTML-Quellcode

      1. <html>
      2. <head>
      3. <title>Meine ersten Ajax Erfahrungen</title>
      4. <script type="text/javascript">
      5. <!--
      6. function doIt(){
      7. var req = null;
      8. try{
      9. req = new XMLHttpRequest();
      10. }
      11. catch (ms){
      12. try{
      13. req = new ActiveXObject("Msxml2.XMLHTTP");
      14. }
      15. catch (nonms){
      16. try{
      17. req = new ActiveXObject("Microsoft.XMLHTTP");
      18. }
      19. catch (failed){
      20. req = null;
      21. }
      22. }
      23. }
      24. if (req == null)
      25. alert("Error creating request object!");
      26. req.open("GET", 'test2.htm', true);
      27. req.onreadystatechange = function(){
      28. switch(req.readyState) {
      29. case 4:
      30. if(req.status!=200) {
      31. alert("Fehler:"+req.status);
      32. }else{
      33. document.getElementById('eins').innerHTML = '<strong>'+
      34. req.responseText
      35. +'</strong>';
      36. }
      37. break;
      38. default:
      39. return false;
      40. break;
      41. }
      42. };
      43. req.setRequestHeader("Content-Type",
      44. "application/x-www-form-urlencoded");
      45. req.send(null);
      46. }
      47. function doIt2(){
      48. var req = null;
      49. try{
      50. req = new XMLHttpRequest();
      51. }
      52. catch (ms){
      53. try{
      54. req = new ActiveXObject("Msxml2.XMLHTTP");
      55. }
      56. catch (nonms){
      57. try{
      58. req = new ActiveXObject("Microsoft.XMLHTTP");
      59. }
      60. catch (failed){
      61. req = null;
      62. }
      63. }
      64. }
      65. if (req == null)
      66. alert("Error creating request object!");
      67. req.open("GET", 'test.html', true);
      68. req.onreadystatechange = function(){
      69. switch(req.readyState) {
      70. case 4:
      71. if(req.status!=200) {
      72. alert("Fehler:"+req.status);
      73. }else{
      74. document.getElementById('eins').innerHTML = '<strong>'+
      75. req.responseText
      76. +'</strong>';
      77. }
      78. break;
      79. default:
      80. return false;
      81. break;
      82. }
      83. };
      84. req.setRequestHeader("Content-Type",
      85. "application/x-www-form-urlencoded");
      86. req.send(null);
      87. }
      88. //-->
      89. </script>
      90. </head>
      91. <body>
      92. <div style="position:absolute; top: 50px; left: 30px; width: 200px; height: 150 px; background-color: #CCFF00; ">
      93. <a href="javascript:doIt()">Klick mich an :D</a><br>
      94. <br></div>
      95. <div id="eins" style="position:absolute; top: 250px; left: 50px; width:200px; height: 15 px; background-color: #CCFF00; ">
      96. </div>
      97. </body>
      98. </html>


      so gehen wir mal schritt für schritt durch - ich gehe davon aus, dass ihr oben mitgelesen habt und ich bekanntes nicht wieder bis ins detail erklären muss ^^

      --- Was macht das Skript?
      => Das Skript liest den Inhalt einer HTML Datei aus, wenn man auf einen Link klickt.
      => In dieser Datei befindet sich wiederrum ein Link, der eine andere Datei läd, wenn sie geklickt wird

      --- Was brauchen wir also?
      => Eine Datei, von der aus wir alles ausführen :)
      Diese Datei beinhaltet:
      * Zwei Javascript Funktionen, die jeweils eine andere HTML Datei laden
      * einen Link um die erste JS funktion auszuführen
      => eine HTML Datei mit einem Link um die andere Datei wieder zu laden :)
      => eine Datei mit beliebigem Text

      So dan gehen wir mal stückchen für stückchen den code durch

      Zuerst kommt wieder die Abfrage, die wir schon anderen Beispielen kennen, die prüft welcher Browser verwendet wird etc... dann folgt eine Überprüfung auf Fehler und wenn alles gut geht gehts los =)

      Quellcode

      1. req.open("GET", 'test2.htm', true);
      2. req.onreadystatechange = function(){
      3. switch(req.readyState) {
      4. case 4:
      5. if(req.status!=200) {
      6. alert("Fehler:"+req.status);
      7. }else{
      8. document.getElementById('eins').innerHTML = '<strong>'+
      9. req.responseText
      10. +'</strong>';


      in req ist wieder das "Objekt" gespeichert das vom Browser verwendet wird. Es läd auf dem weg "GET" die datei test2.htm und true bedeutet, dass die abfrage asynchron durchgeführt wird.
      Dann checkt das Skript welchen wert readyState hat, ihr erinnrt euch ? Das sind diese 5 Stufen die schon von developer.mozilla.org/de/docs/AJAX:Getting_Started beschrieben wurden. Wenn es den wert 4 hat, ist der Vorgang des ladens abgeschlossen.
      Dann prüft er nochmal ob ein Fehler vorliegt und wenn nicht:

      Quellcode

      1. document.getElementById('eins').innerHTML = '<strong>'+
      2. req.responseText
      3. +'</strong>';


      Im Dokument macht er aus dem Teil, der mit der ID eins bezeichnet ist also diesem "div-Bereich" ein element. Dieses element wird mit Text gefüllt und zwar handelt es sich dabei um den Text, der aus req gelesen wurde. strong bedeutet lediglich, dass der Text fett dargestellt werden soll. Man könnte also das strong auch durch i ersetzen dann wird der text kursiv dargestellt. So hab ich es bei der zweiten Funktion gemacht :)

      Ihr müsst bei der zweiten Funktion nur den Namen ändern (den Link dementsprechen angleichen) und die zu ladende HTML datei.

      Da Programmierer Grundsätzlich faul sind, muss es natürlich auch ne einfachere Methode geben. Wir können einfach das was sich ändert durch variablen ersetzen und diese durch den Link übergeben. Dann können wir auch darauf verzichten den Funktionsnamen zu ändern, denn dann brauchen wir ja nur eine Funktion :)
      Was muss man dann noch ändern? Richtig! Den Namen der Datei, die geladen werden soll.

      Dabei können wir auf das Wissen zurückgreifen, dass wir schon in anderen Beispielen erworben haben. Da habe ich nämlich ähnlich gearbeitet :)
      Wir brauchen eine Variable
      ich nenne sie einfach mal

      Datei
      Die wird als Parameter zwischen die Klammern der Funktion angegeben
      die Funktion nenne ich einfach mal
      dateiLaden[b]
      [b]Achtet darauf, dass ihr den Funktionsnamen immer gleich schreibt. Zwischen Groß und kleinschreibung wird unterschieden ^^


      So also hier der Code:


      Quellcode

      1. <script type="text/javascript">
      2. <!--
      3. function dateiLaden(datei){
      4. var req = null;
      5. try{
      6. req = new XMLHttpRequest();
      7. }
      8. catch (ms){
      9. try{
      10. req = new ActiveXObject("Msxml2.XMLHTTP");
      11. }
      12. catch (nonms){
      13. try{http://talk.iwebtool.com/thread10377.html
      14. req = new ActiveXObject("Microsoft.XMLHTTP");
      15. }
      16. catch (failed){
      17. req = null;
      18. }
      19. }
      20. }
      21. if (req == null)
      22. alert("Error creating request object!");
      23. req.open("GET", datei, true);
      24. req.onreadystatechange = function(){
      25. switch(req.readyState) {
      26. case 4:
      27. if(req.status!=200) {
      28. alert("Fehler:"+req.status);
      29. }else{
      30. document.getElementById('eins').innerHTML = '<strong>'+
      31. req.responseText
      32. +'</strong>';
      33. }
      34. break;
      35. default:
      36. return false;
      37. break;
      38. }
      39. };
      40. req.setRequestHeader("Content-Type",
      41. "application/x-www-form-urlencoded");
      42. req.send(null);
      43. }
      44. //-->
      45. </script>
      46. </head>
      47. <body>
      48. <div style="position:absolute; top: 50px; left: 30px; width: 200px; height: 150 px; background-color: #CCFF00; ">
      49. <a href="javascript:dateiLaden('test3.htm')">Klick mich an :D</a><br>
      50. <br></div>
      51. <div id="eins" style="position:absolute; top: 250px; left: 50px; width:200px; height: 15 px; background-color: #CCFF00; ">
      52. </div>
      53. </body>
      54. </html>


      und hier der von test3.htm

      Quellcode

      1. Hallo :D
      2. <a href="javascript:dateiLaden('test.html')">klick mich an =)</a>



      Soo
      ich fand das schonmal voll praktisch und hab mir überlegt man könnte ja auch mal ein Beispiel machen das wirklich so zum Einsatz kommen kann ;)
      Deswegen habe ich mich für ein kleines Menü entschieden :)


      => Es gibt mit sicherheit bessere und einfachere lösungen um ein menü zu realisieren nur leider kann ich derzeit noch keine bessere umsetzenn :D <=

      Vorüberlegungen:
      Wir haben eine Datei, die nennen wir mal menue.html das ist unser Menü ;) und dieses Menü hat 3 Obermenüpunkte zB Sport, Musik und Internet mit jeweils 5 Links darin.. die könnt ihr einfach durchnummerieren oder so.. sie müssen ja im prinzip auch nicht gehen ;) ist ja nur zum testen
      Die Obermenüpunkte bekommen jeweils HTML Seiten in denen sich die unterpunkte befinden. Also
      eine HTML Seite
      Sport eine für musik und eine für internet (oder wie uach immer ihr die scahen nennen wollt) ich hab sie einfach mal musik.htm, sport.htm und internet.htm genannt =) und sie sind alle gleich aufgebaut. Einfach nur Links :) also zB <a href="#">Link1</a> usw usw ;) (weiter unten kommen wir acuh darauf wie man die links in eineiner eigenen div läd ;D )

      So das herzstück ist ja nun die datei menü.html =)

      HTML-Quellcode

      1. <html>
      2. <head>
      3. <title>Meine ersten Ajax Erfahrungen</title>
      4. <script type="text/javascript">
      5. <!--
      6. function dateiLaden(datei){
      7. var req = null;
      8. try{
      9. req = new XMLHttpRequest();
      10. }
      11. catch (ms){
      12. try{
      13. req = new ActiveXObject("Msxml2.XMLHTTP");
      14. }
      15. catch (nonms){
      16. try{
      17. req = new ActiveXObject("Microsoft.XMLHTTP");
      18. }
      19. catch (failed){
      20. req = null;
      21. }
      22. }
      23. }
      24. if (req == null)
      25. alert("Error creating request object!");
      26. req.open("GET", datei, true);
      27. req.onreadystatechange = function(){
      28. switch(req.readyState) {
      29. case 4:
      30. if(req.status!=200) {
      31. alert("Fehler:"+req.status);
      32. }else{
      33. document.getElementById('eins').innerHTML = datei+':<br><strong>'+
      34. req.responseText
      35. +'</strong>';
      36. }
      37. break;
      38. default:
      39. return false;
      40. break;
      41. }
      42. };
      43. req.setRequestHeader("Content-Type",
      44. "application/x-www-form-urlencoded");
      45. req.send(null);
      46. }
      47. //-->
      48. </script>
      49. </head>
      50. <body>
      51. <div style="width: 150px; position:absolute; top: 20px; left: 20px; background-color:#FFFF66;">
      52. <a href="javascript:dateiLaden('sport.htm')">Sport</a><br>
      53. <a href="javascript:dateiLaden('musik.htm')">Musik</a><br>
      54. <a href="javascript:dateiLaden('internet.htm')">Internet</a><br>
      55. </div>
      56. <div id="eins" style="width: 150px; position: absolute; top: 70px; left:20px; background-color:#336699; ">
      57. </div>
      58. </body>
      59. </html>


      ich find diese Art von Menü sehr viel übersichtlicher (wenn auc einfacher und man bruacht mehr dateien.. :-/ aber die lösung kommt bestimmt bald :D) als die üblichen Javascript menüs ;) ich bin grade dabei auf meiner HP etwas ähnliches als "Newsübersicht" zu programmieren ;) ich zeig euch später das Ergebnis =)
      Mein Blog
      Facebook
      Twitter

      Ich freue mich immer über Nachrichten. Falls ihr über einen Facebookaccount verfügt, ist ratsamer mich darüber zu kontaktieren, weil ich diese Nachrichten i.d.R. schneller beantworte.
      Dann möchte ich mich mal ganz herzlich für dieses Tutorial bedanken. Bin gerade dabei ein Script mit Einsatz von Ajax zu programmieren (natürlich um up-to-date zu bleiben :D ) und finde Ajax echt schön.
      Leider kann ich kaum java Script aber ich denke das wird sich ändern wenn ich mich weiter damit beschäftige.
      GoHome! Arbeitszeitüberwachung! (@iOS AppStore)
      Reminder, Worktime, Arbeitszeit, Arbeit, Ueberwachung, Zeiten, Zeitenstempeln
      :dafür:
      Hallo Leute!

      Endlich antwortet mal jemand :party:
      ich bin leider aus zeitgründen noch ncit wieder dazu gekommen am tutorial weiter u screiben :) mache es aber bald


      Gestern habe ich auch etwas mit Ajax und php programmiert ein kleines rating skript. Was ich daran so super fand war, dass ich das rating abgeschickt habe und es auch in die datenbank eingetragen wurde, OHNE dass die seite neu geladen wurde !!!
      Mein Blog
      Facebook
      Twitter

      Ich freue mich immer über Nachrichten. Falls ihr über einen Facebookaccount verfügt, ist ratsamer mich darüber zu kontaktieren, weil ich diese Nachrichten i.d.R. schneller beantworte.
      Das war wieder typisch. Ich saß stundenlang dran weil ich:

      Ein Formular welches über MySQL Werte ausliest. Diese kann man dann per Radiobutton auswählen. Per Ajax rufe ich ein Script auf welches dann aus der Datenbank neue Einträge ausliest für die 2. Box darunter.
      Nur ich wusste nicht wie man radiobuttons anspricht :-!
      Lösung gabs dann per google *g*

      Eigentlich ist das totale Spielerei, es sieht aber cool aus :yipie:

      Den Rest des Scriptes mache ich ohne Ajax. Da bin ich in der hälfte der Zeit fertig :D
      GoHome! Arbeitszeitüberwachung! (@iOS AppStore)
      Reminder, Worktime, Arbeitszeit, Arbeit, Ueberwachung, Zeiten, Zeitenstempeln
      :dafür:
      Das moderieren beim WBB3 ist total super gelöst finde ich. Da merkt man gar nicht mehr die Grenzen des Browsers bzw. der Forenkategorie. Bis ich das Ajax verstehe dauert es wohl noch ne Weile. Bin aber mit meinem bisherigen Ergebnis recht zufrieden :)

      Jetzt muss ich nur noch schauen wie ich die Seite für die User ohne JS anzeigen lasse. Gibts da was in php? Also irgendwie eine überprüfung bräuchte ich ob JS an oder eben nicht.
      GoHome! Arbeitszeitüberwachung! (@iOS AppStore)
      Reminder, Worktime, Arbeitszeit, Arbeit, Ueberwachung, Zeiten, Zeitenstempeln
      :dafür:
      Es gibt ja auch die Möglichkeit sowas immer mit Weiterleitungen zu machen... wobei die nicht sehr suchmaschinenfreundlich sind... was man ebenfalls machen könnte, eine Funktion die mit php und js funktioniert, prüft ob JS aktiviert ist und dann ggf in der session oder als cookie speichert und dann per php den seiteninhalt ohne js bzw mit darstellt
      Mein Blog
      Facebook
      Twitter

      Ich freue mich immer über Nachrichten. Falls ihr über einen Facebookaccount verfügt, ist ratsamer mich darüber zu kontaktieren, weil ich diese Nachrichten i.d.R. schneller beantworte.
      eine Funktion die mit php und js funktioniert, prüft ob JS aktiviert ist und dann ggf in der session oder als cookie speichert und dann per php den seiteninhalt ohne js bzw mit darstellt

      Habe in einem Board gelesen das ginge mit get_browser(javascript) aber das gibt mir nichts zurück. In nem anderen Board hieß es PHP könne das nicht auslesen.
      GoHome! Arbeitszeitüberwachung! (@iOS AppStore)
      Reminder, Worktime, Arbeitszeit, Arbeit, Ueberwachung, Zeiten, Zeitenstempeln
      :dafür: