Javascript Funktion wird nicht aufgerufen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Javascript Funktion wird nicht aufgerufen

    Hi!

    Ich habe hier ein Javascript geschrieben, welches einen Reuqest erzeugt und dann die nächste Funktion, sprich die Funktion ausgeben(), aufrufen soll. Dies funktioniert aber nicht. Warum?

    Quellcode

    1. var request;
    2. function createRequest() {
    3. request = null;
    4. if (window.XMLHttpRequest) { // Mozilla, Safari,...
    5. request = new XMLHttpRequest();
    6. if (request.overrideMimeType) {
    7. request.overrideMimeType("text/xml");
    8. }
    9. } else if (window.ActiveXObject) { // IE\n
    10. try {
    11. request = new ActiveXObject("Msxml2.XMLHTTP");
    12. } catch (e) {
    13. alert("1");
    14. try {
    15. request = new ActiveXObject("Microsoft.XMLHTTP");
    16. } catch (e) {
    17. alert("1");
    18. }
    19. }
    20. } else {
    21. alert("Kein Request erzeugt!");
    22. return false;
    23. }
    24. request.open("GET", "links.xml", true);
    25. request.onreadystatechanged = ausgeben();
    26. request.send(null);
    27. }
    28. function ausgeben() {
    29. if (request.readyState == 1) {
    30. window.status = "receiving response --> state 1";
    31. } else if (request.readyState == 2) {
    32. window.status = "response received --> state 2";
    33. } else if (request.readyState == 3) {
    34. window.status = "in action --> state 3";
    35. } else if (request.readyState == 4) {
    36. window.status = "finished --> state 4";
    37. if (request.status == 200) {
    38. alert("Hurra");
    39. } else {
    40. //Problem on loading
    41. }
    42. }
    43. }
    Alles anzeigen
  • Weiß der Teufel was da los war. Funktioniert jetzt. Mit Hilfe eines XMLHttpRequest wird eine XML-Datei abgefragt und die einzelnen Elemente werden an eine Tabelle angehängt.

    Quellcode

    1. var http = null;
    2. function request() {
    3. if (window.XMLHttpRequest) {
    4. http = new XMLHttpRequest();
    5. } else if (window.ActiveXObject) {
    6. http = new ActiveXObject("Microsoft.XMLHTTP");
    7. }
    8. if (http != null) {
    9. http.open("GET", "links.xml", true);
    10. http.onreadystatechange = ausgeben;
    11. http.send(null);
    12. }
    13. }
    14. function ausgeben() {
    15. if (http.readyState == 4) {
    16. var liste = document.getElementById("Liste");
    17. var daten = http.responseXML;
    18. var ergebnisse = daten.getElementsByTagName("request");
    19. for (var i = 0; i < ergebnisse.length; i++) {
    20. var name, url;
    21. var eintrag = ergebnisse[i];
    22. for (var j = 0; j < eintrag.childNodes.length; j++) {
    23. with (eintrag.childNodes[j]) {
    24. if (nodeName == "name") {
    25. name = firstChild.nodeValue;
    26. } else if (nodeName == "status") {
    27. status = firstChild.nodeValue;
    28. }
    29. }
    30. }
    31. var li = document.createElement("tr");
    32. var a = document.createElement("td");
    33. var b = document.createElement("td");
    34. var txt = document.createTextNode(name);
    35. var text = document.createTextNode(status);
    36. a.appendChild(txt);
    37. b.appendChild(text);
    38. li.appendChild(a);
    39. li.appendChild(b);
    40. liste.appendChild(li);
    41. }
    42. }
    43. }
    Alles anzeigen


    Jetzt gibt es nur noch das Problem, dass er die Tabelle beim ersten Aufruf nicht anzeigt, sondern erst nach erneutem aktualisieren. Jemand ne Idee woran das liegt?

    Gruß
    Rantan
  • Ja, die Funktion wird onload aufgerufen.

    Wenn ich den Server starte und dann zu der Seite connecte, dann zeigt er erstmal gar nix an. Erst wenn ich dann nochmal auf aktualisieren drücke passiert was.

    Und jetzt hab ich mal noch einmal alert("request") und einmal alert("ausgeben") an die Anfänge der Funktionen geschrieben, um zu gucken wie das mit den Aufrufen abläuft und bin völlig verwirrt. Wenn ich jetzt auf aktualisieren klicke, dann ruft er einmal die Funktion request auf und dann 4(!!!) mal die Funktion ausgeben...was veranlasst ihn dazu?!?

    Gruß
    Rantan
  • Und im Internet Explorer macht er überhaupt nichts. Funktioniert nur im Firefox...

    Hier mal das Servlet, welches der Ursprung des ganzen Übels ist... ^^

    Quellcode

    1. package de.werum.servlets;
    2. import java.io.IOException;
    3. import java.io.PrintWriter;
    4. import javax.servlet.ServletException;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. public class HelloServlet extends HttpServlet
    9. {
    10. protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
    11. throws ServletException, IOException
    12. {
    13. arg1.setContentType("text/html");
    14. PrintWriter pw = arg1.getWriter();
    15. String docType = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//E'>\n";
    16. pw.println(docType + "<HTML>\n"
    17. + "<HEAD>\n"
    18. + "<script type='text/javascript' src='script.js'>\n"
    19. + "<meta http-equiv='cache-control' content='no-cache'/>\n"
    20. + "<meta http-equiv='pragma' content='no-cache'/>\n"
    21. + "<TITLE>Ajax-Test</TITLE>\n"
    22. + "</HEAD>\n"
    23. + "<BODY onload=\"request()\">\n"
    24. + "<TABLE ID='Liste' BORDER='1'>\n"
    25. + "<TH>Name</TH>\n"
    26. + "<TH>Status</TH>\n"
    27. + "</TABLE>\n"
    28. + "</BODY>\n"
    29. + "</HTML>");
    30. }
    31. }
    Alles anzeigen
  • Vor allem, wenn du mit DOM arbeitest (aber eigentlich auch so), solltest du auf korrektes HTML achten.

    Keine THs ohne TRs. Außerdem Tags klein schreiben.
    Validiere am besten mal bei http://validator.w3.org

    "Rantanohneplan" schrieb:

    Ah, das er die Funktion ausgeben() 4 mal aufruft liegt am readyState oder? Für jeden Wechsel des readyStates von 1 bis 4 wird die aufgerufen, richtig?


    Das ist korrekt. Bei jedem Wechsel wird die Funktion aufgerufen. Deswegen auch die Bedingung.

    Verschiedene States: http://msdn2.microsoft.com/en-us/library/ms534359.aspx
    uninitialized Object is not initialized with data.
    loading Object is loading its data.
    loaded Object has finished loading its data.
    interactive User can interact with the object even though it is not fully loaded.
    complete Object is completely initialized.