tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
1098
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Hi Leute, hab ein kleines Problem.

    Ich mach mir einen HTTPRequest, konfiguriere ihn und setze ihn ab, so weit, so gut.

    Das Problem ist jezt nur, dass die auszuführende Funktiion nie ausgeführt wird, ich aber keine Ahnung habe wieso, habe es bisher immer so gemacht und hatte eigentlich keine Probleme damit.

    So, der Code:

    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    
    function makeRequest(url, action) {  
        var httpRequest;    
        //Beginn anlegen des XMLHTTPREquest objektes (FINGER WEG)   
        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            httpRequest = new XMLHttpRequest();
            if (httpRequest.overrideMimeType) {
                httpRequest.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                }
            }
        }
     
        if (!httpRequest) {
            alert('Giving up :(  Cannot create an XMLHTTP instance');
            return false;
        }
     
        switch(action) {
        case SHOW_CONTENT:
            httpRequest.onreadystatechange = function() { printContent(httpRequest); };
            httpRequest.open('GET', url, false);
            httpRequest.send('');
            break;
        case SHOW_NEWS:
            httpRequest.onreadystatechange = function() { printNews(httpRequest); };
            httpRequest.open('GET', url, false);
            httpRequest.send('');
            break;
        case ADD_GB_ENTRY:
            //ersetzen des buttons duch "einen Moment bitte..."
            elem = document.getElementById("addGbEntryCont");
            tn = document.createTextNode("einen Moment bitte...")
            el = document.getElementById("addGbEntryBut");
            elem.replaceChild(tn,el);
            //button ersetzt
            
            author = document.getElementById('gbEntryName').value;
            msg = formatMessage(document.getElementById('gbEntryMsg').value);
            httpRequest.onreadystatechange = function() { entryAdded(httpRequest); };
            httpRequest.open('GET', url + "?author=" + author + "&msg=" + msg, true);
            httpRequest.send('');
            break;
        case ADJUST:
            httpRequest.onreadystatechange = function() { adjusted(httpRequest); };
            url=url.split('?');
            httpRequest.open('POST', url[0], false);
            httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            httpRequest.setRequestHeader("Content-length", url[1].length);
            httpRequest.setRequestHeader("Connection", "close");
            httpRequest.send(url[1]);
            break;
        }
    return true;
    }

    und eine der funktionen:
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    function printContent(httpRequest) {
        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
                document.getElementById("content").innerHTML = httpRequest.responseText;
            } else {
                alert('There was a problem with the request.');
            }
        }        
    }

    Es müsste nicht die ganze makeRequest funktion sein, aber ich denke mir is besser zum Verständnis

    Vielen Dank schon mal für die Hilfe und... frohe Weihnachten

    mfg me
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    deine switch-Fälle, du beziehst dich da auf action, aber was übergibst du da als action?

    Sind das Variablen(namen), weil falls sie das nicht sind sondern Strings, müsstest du die Fälle in Anführungszeichen setzen.
     

  3. #3
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Sind ganz normale int werte, also 1, 2, 3

    //edit: und ja, sind Variablennamen

    //edit2

    vl sollte ich noch dazusagen, dass die Case fälle funktionieren, er geht rein, führt den Darin enthaltenen Code aus (mitm Netbeans javascript debugger geprüft) und schließt die Fkt wie gewünscht ab.

    Das Problem ist nur, dass die auszuführende Funktion, im ersten case Fall printContent(..) einfach nicht ausgeführt wird.

    Hab schon geprüft ob ich vl einen error Code zurückbekomme, aber gar nichts.
    Geändert von Biergamasda (24.12.08 um 14:43 Uhr)
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ich habe dies jetzt mal nachgestellt, und es funktioniert alles einwandfrei.

    Ist das Beispiel von dir irgendwo online, um den Fehler dort suchen zu Können?
     

  5. #5
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Habs jetz mal hochgeladen

    http://biergamasta.bi.ohost.de/hp

    und zum download als rar (sin auch paar php files dabei)
    http://biergamasta.bi.ohost.de/hp/hp.rar

    Die SQL zugriffe funktioniern nicht, da ich die DB nicht hergerichtet habe, daran solls aber nicht scheitern

    mfg
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    funktioniert doch alles 1a
     

  7. #7
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Hmm... bei mir geht auf der Seite nix das mit AJAX zu tun hat....

    Wird dann wohl eine andere Ursache haben. Wenn ich draufkomme gebe ich Bescheid woran es gelegen hat

    Danke für deine Mühen

    mfg
     

  8. #8
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    Sorry fürn Doppelpost

    Hab jetz noch ein wenig rumprobiert, und bin auf einige Kleinigkeiten draufgekommen.

    1. Rechts sollten news drin sein, die wurden nicht angezeigt, weil ich hier (Zeile 4):

    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    function printNews(httpRequest) {
        if (httpRequest.readyState == 4) {
            if (httpRequest.status == 200) {
                var news = httpRequest.responseText.split(';');
                for (i = 0; i < news.length - 1; i++) {
                    div = document.createElement("div");
                    div.className = "newsTeaser";
                    div.appendChild(document.createTextNode(news[i].split(".")[0]));
                    div.onclick = new Function('makeRequest("./news/' + news[i]+ '",SHOW_CONTENT)');
                    document.getElementById("news").appendChild(div);                
                }
            } else {
                alert('There was a problem with the request.');
            }
        }    
    }

    auf das "var" vergessen habe

    Naja, so weit so gut...

    Das blöde daran ist nur, dass das mein Problem immer noch nicht behebt. Hab im Windows ein wenig rumexperimentiert, und kann mir mitm IE (6 und 7) alles (bis auf ein paar kleinigkeiten) problemlos ansehen, und die AJAX routinen funktionieren auch.

    Wenn ich das Ganze jetzt im Firefox (3.0.5) anschaue, geht das AJAX zeug nicht mehr. Weder im Windows (XP), noch im Linux (Ubuntu 8.1)

    Jetzt meine Frage(n):
    1. Kann es sein, dass der Firefox 3.0.5 irgendetwas anders interpretiert?

    2. Könnte es sein, dass es daran liegt, dass die Files auf einem Linux server liegen? (wobei ich mir das eher nicht vorstellen kann, da es übern IE ja Funktioniert

    3. Welchen Browser verwendest du?

    Danke nochmal
    Geändert von Biergamasda (26.12.08 um 10:48 Uhr)
     

  9. #9
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ui, ich hab jetzt glatt an mir gezweifelt, die Lösung ist recht simpel

    Ums kurz zu machen, dein AJAX funktioniert nicht, weil in deinem Code nicht ein Schnipsel AJAX ist

    Was bedeutet AJAX?
    Asynchronous Javascript and XML

    Deine Requests erfolgen jedoch alle synchron.

    Was bedeutet synchron?
    Das Standardverhalten von JS ist ja, dass es eine Anweisung nach der anderen erledigt.
    Also bei dir in der Theorie: Request senden, und wenn das erledigt ist, geht es weiter.
    Nur: es scheint so zu sein, dass FF3 währendessen die Vorgänge während des Sendens des Requests ignoriert...die Funktion für den onreadystatechange-Event wird anscheinend nicht aufgerufen, und wenn das Senden erledigt ist, ändert sich ja der readystate nicht mehr.

    Die synchrone Vorgehensweise sollte also jene sein:
    Code :
    1
    2
    3
    
    httpRequest.open('GET', url, false);
    httpRequest.send('');
    printContent(httpRequest);

    allerdings sind synchrone Sendevorgänge kaum empfehlenswert, denn bis zum Abschluss des Vorgangs ist der Browser auf Eis gelegt.

    Lösung: verwende wie üblich asynchrone Request. Du musst dafür nur überall den 3.Parameter bei httpRequest.open() auf true setzen(oder ihn weglassen, denn true ist der Standardwert).

    Ansonsten: Hatte es mit allem möglichen getestet, nur nicht mit FF3, weswegen es mir zuerst nicht als Problem begegnete.
     

  10. #10
    Avatar von Biergamasda
    Biergamasda Biergamasda ist offline Mitglied Brokat
    Registriert seit
    Feb 2005
    Beiträge
    373
    hmm, daran hats gelegen
    Danke für die Hilfe

    Wünsche noch ein schönes WE

    mfg
     

Ähnliche Themen

  1. [AJAX] Funktion funktioniert, wird jedoch nicht aufgerufen
    Von Milliongame im Forum Javascript & Ajax
    Antworten: 7
    Letzter Beitrag: 27.01.09, 19:28
  2. JS im return von ajax wird nicht ausgeführt.
    Von Nord-Süd-Richtung im Forum Javascript & Ajax
    Antworten: 8
    Letzter Beitrag: 05.12.08, 23:43
  3. PHP wird nicht richtig ausgeführt
    Von freundeder4ringe im Forum PHP
    Antworten: 6
    Letzter Beitrag: 20.04.07, 21:26
  4. Funktion wird nicht richtig ausgeführt
    Von RehW im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 29.06.06, 11:27
  5. Linux + php wird nicht richtig ausgeführt.
    Von sterndi im Forum Linux & Unix
    Antworten: 6
    Letzter Beitrag: 16.04.04, 07:37