wucher wichtel: Opera macht Probleme bei AJAX

Hallo!

Ich habe ein Problem mit Opera. Aus irgendeinem Grund funktioniert der Request nicht. Könnt ihr mir sagen wieso?

Hier mal der Quelltext:

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  
  
<html>  
<head>  
 <title>Test</title>  
  
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
 <meta http-equiv="Content-Script-Type" content="text/javascript">  
 <meta http-equiv="Content-Style-Type" content="text/css">  
  
 <link rel="STYLESHEET" type="text/css" href="css/css.css">  
 <script type="text/javascript" src="scripts.js"></script>  
</head>  
  
<body>  
 <a href="#" onclick="makeRequest('test.php');return false">test</a>  
</body>  
</html>  

Hier das JavaScript:

  
    var http_request = false;  
  
    function makeRequest(url) {  
  
        http_request = false;  
  
        if (window.XMLHttpRequest) {  
            http_request = new XMLHttpRequest();  
            if (http_request.overrideMimeType) {  
                http_request.overrideMimeType('text/html');  
            }  
        } else if (window.ActiveXObject) {  
            try {  
                http_request = new ActiveXObject("Msxml2.XMLHTTP");  
            } catch (e) {  
                try {  
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");  
                } catch (e) {}  
            }  
        }  
  
        if (!http_request) {  
            alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');  
            return false;  
        }  
        http_request.onreadystatechange = callFunc;  
        http_request.open('POST', url, true);  
        http_request.send(null);  
  
    }  
  
    function callFunc() {  
  
        if (http_request.readyState == 4) {  
            if (http_request.status == 200) {  
                writeContent();  
            } else {  
                alert('Bei dem Request ist ein Problem aufgetreten.');  
            }  
        }  
  
    }  
  
 function writeContent() {  
  
  alert(http_request.responseText);  
  
 }  

Und das kleine PHP-Script (wobei letzteres eigentlich Daten aus einer Datenbank holt):

  
<?php  
 echo "Hallo!";  
?>  

Der HTML und der PHP-Quelltext wurden stark vereinfacht. Beim PHP-Script ist es schließlich egal, woher es die Daten hat, die per echo ausgegeben werden. Der Fehler müsste doch im JavaScript liegen. Aber wo?

Danke schön für eure Hilfe!

ciao, ww

--
Dies ist eine sehr einfache und effektive Sicherheitsstufe, aber nicht perfekt. Denn wenn mehrere User über eine Leitung ins Internet gehen, haben für den Webserver alle User die selbe IP. Und dann wirkt diese Sicherheitsstufe nicht mehr. Aber zumindest könnt ihr demjenigen, der euch die Session-ID geklaut hat, eins in die Fresse hauen.
http://tut.php-q.net/login.html
  1. Hallo!

    Ich hab's jetzt noch ein bisschen ausführlicher getestet. Bei Firefox 2.0 und Internet Explorer 6.0 funktioniert es einwandfrei. Opera 8.52 und Netscape 7.1 machen einfach gar nichts. Auch in der JavaScript-Konsole von beiden wird nichts angezeigt.

    ciao, ww

    --
    Dies ist eine sehr einfache und effektive Sicherheitsstufe, aber nicht perfekt. Denn wenn mehrere User über eine Leitung ins Internet gehen, haben für den Webserver alle User die selbe IP. Und dann wirkt diese Sicherheitsstufe nicht mehr. Aber zumindest könnt ihr demjenigen, der euch die Session-ID geklaut hat, eins in die Fresse hauen.
    http://tut.php-q.net/login.html
  2. hi,

    Ich habe ein Problem mit Opera. Aus irgendeinem Grund funktioniert der Request nicht. Könnt ihr mir sagen wieso?

    Opera 9 macht keine Probleme, im Opera 8 kann ich's allerdings nachvollziehen.
    Meldungen in der Konsole komischerweise wirklich keine.

    http_request.send(null);

    Das mag er wohl nicht - ein wenig Herumtesten ergab, dass damit der readyState auf 1 stehen bleibt. 1 bedeutet "loading" - aber ohne Daten zum Senden bleibt's dann wohl auch bei diesem Zustand.

    Sobald ich hier als Parameter bei send() einen Leerstring einsetze, funktioniert es auch mit dem Opera 8.
    Ganz ohne Parameter funktioniert wiederum nicht.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo!

      Sobald ich hier als Parameter bei send() einen Leerstring einsetze, funktioniert es auch mit dem Opera 8.
      Ganz ohne Parameter funktioniert wiederum nicht.

      Vielen Dank für deine Bemühungen und das Testen. Danke schön!

      ciao, ww

      --
      Dies ist eine sehr einfache und effektive Sicherheitsstufe, aber nicht perfekt. Denn wenn mehrere User über eine Leitung ins Internet gehen, haben für den Webserver alle User die selbe IP. Und dann wirkt diese Sicherheitsstufe nicht mehr. Aber zumindest könnt ihr demjenigen, der euch die Session-ID geklaut hat, eins in die Fresse hauen.
      http://tut.php-q.net/login.html
      1. Hallo!

        Ich hab's mir nochmal mit Netscape 7.1 angeschaut. Da funktioniert es immer noch nicht. Allerdings funktioniert es im Netscape 8. Aber ich denke, dass man den 7er Netscape vernachlässigen kann, oder?

        ciao, ww

        --
        Dies ist eine sehr einfache und effektive Sicherheitsstufe, aber nicht perfekt. Denn wenn mehrere User über eine Leitung ins Internet gehen, haben für den Webserver alle User die selbe IP. Und dann wirkt diese Sicherheitsstufe nicht mehr. Aber zumindest könnt ihr demjenigen, der euch die Session-ID geklaut hat, eins in die Fresse hauen.
        http://tut.php-q.net/login.html
  3. Tach wucher wichtel,

    http_request.open('POST', url, true);
            http_request.send(null);

    Bei der Methode POST erwartet die send()-Methode auch entsprechende Daten, null wäre bei GET zu verwenden. Insofern sollte in diesem Fall wohl wenigstens ein Leerstring "" bei send() angegeben werden (siehe Test von wahsaga) oder eben GET.

    Möglicherweise verhalten sich da neuere Browser etwas toleranter ...

    Man liest sich,
    svg4you

    1. Hallo!

      Bei der Methode POST erwartet die send()-Methode auch entsprechende Daten, null wäre bei GET zu verwenden. Insofern sollte in diesem Fall wohl wenigstens ein Leerstring "" bei send() angegeben werden (siehe Test von wahsaga) oder eben GET.

      Danke schön!

      ciao, ww

      --
      Dies ist eine sehr einfache und effektive Sicherheitsstufe, aber nicht perfekt. Denn wenn mehrere User über eine Leitung ins Internet gehen, haben für den Webserver alle User die selbe IP. Und dann wirkt diese Sicherheitsstufe nicht mehr. Aber zumindest könnt ihr demjenigen, der euch die Session-ID geklaut hat, eins in die Fresse hauen.
      http://tut.php-q.net/login.html