soulcatcher: objekt erwartet (zeile: 1, zeichen: 1, code: 0)

ich bin gerade dabei, ein dms a la ajax zu bauen. als php-profi und js-noop.

ich frage die php-datei unter angabe des aktuellen verzeichnisses, welche verzeichnisse dort liegen und bekomme diese information als json zurück.

das js soll nun die visualisierung übernehmen und bei mausklick eine weitere abfrage starten und das jeweilige unterverzeichnis anzeigen (usw.).

funktioniert soweit, aber nach dem 2. aufruf bekomme ich diese ominöse fehlermeldung a la microsoft: objekt erwartet (zeile: 1, zeichen: 1, code: 0).

hier der js-code (php-code is 1. echt simple und wird glaub ich nicht gebraucht):

<html>
<head>
<title>Zeichne Verzeichnisliste</title>

<script type="text/javascript">
var directorylist;
var req = null;
var aktdir;

function writedirlist(){
  switch(req.readyState) {
    case 4:
      if(req.status!=200) {  //wenn http-req nicht erfolgreich
        alert("Fehler:"+req.status);
      }else{
        var directorylist = eval('(' + req.responseText + ')');   //JSON -> directorylist

document.write("<div id='ordner' style='position: absolute; left: 10px; width: 150px; height: 80%; border: dashed 1px;'>");
        for (var i=0; i<directorylist.dirlist.length; i++)
        { aktdir = directorylist.dirlist[i];
          document.write("<div id='ordner' style='background-color:#FF0000;'><a href = javascript:getdirlist('" + aktdir  + "');>" + aktdir + "</a></div>");
        }
        document.write("<div id='ordner' style='background-color:#FF0000;'>" + directorylist.aktdir + "</div>");

document.write("<div id='ordner' style='background-color:#FF0000;'><a id='test' href = javascript:getdirlist('" + aktdir  + "');>" + aktdir + "</a></div>");

//test-element
//        document.getElementById("test").href = "javascript:getdirlist('" + directorylist.aktdir  + "')";
//        document.getElementById("test").firstChild.nodeValue = directorylist.aktdir;

document.write("</div>");  document.write("<div id='ordner' style='position: absolute; left: 10px; width: 150px; height: 80%; border: dashed 1px;'>");

//zeichnet er?
        alert("zeichnen");
     }
    break;
    default:
      return false;
    break;
  }
}

function getdirlist(aktdir){
  //erstellen des requests
  try{
    req = new XMLHttpRequest();
  }
  catch (e){
    try{
      req = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e){
      try{
        req = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (failed){
        req = null;
      }
    }
  }
  if (req == null)
    alert("Error creating request object!");

//anfrage erstellen (GET, url ist localhost,
  //request ist asynchron

var url = 'http://www.soulysworld.net/ajax/list_directorys1.php?aktdir=' + aktdir;

req.open("GET", url, true);

//Beim abschliessen des request wird diese Funktion ausgeführt
  req.onreadystatechange = writedirlist;

req.setRequestHeader("Content-Type",
    "application/x-www-form-urlencoded");
  req.send(null);
}
</script>

</head>
<body>

<script type="text/javascript">

directorylist = "root";
  getdirlist(directorylist);

</script>

</body>
</html>

bitte bitte, ich häng scho den 3. tag an diesem fehler und komm net weiter ... eh klar als js-noop ^^

  1. Yerf!

    function writedirlist(){
      switch(req.readyState) {
        case 4:
          if(req.status!=200) {  //wenn http-req nicht erfolgreich
            alert("Fehler:"+req.status);
          }else{
            var directorylist = eval('(' + req.responseText + ')');   //JSON -> directorylist

    Ich vermute mal, das hier der Fehler passiert. Was genau steht in req.responseText und ist es auch das, was erwartet wird?

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. Ich vermute mal, das hier der Fehler passiert. Was genau steht in req.responseText und ist es auch das, was erwartet wird?

      da kommt genau das an, was ankommen soll. x-mal geprüft und vorher schon als listen ausgegeben. die kommunikation mit dem php via json ist einwandfrei.

      directorylist.dirlist[i] sind die einzelnen verzeichnisnamen, die zurückgegeben werden.

      directorylist.aktdir ist das aktuelle verzeichnis, von dem er die daten zieht, sozusagen als "prüfvariable".

      aber ja, ich werd zaus was gscheites installieren.

      thx trotzdem

      1. Yerf!

        aber ja, ich werd zaus was gscheites installieren.

        Wobei auch der FF teilweise nur diese Angabe liefert, wenn der Fehler in "anonymen" Code apssiert( z.B. bei eval, deshalb war das der erste Tip). Also am besten auch gleich den FireBug noch mit holen.

        Wobei mir in deinem Code noch etwas aufgefallen ist:

        document.write("<div id='ordner' style='background-color:#FF0000;'><a id='test' href = javascript:getdirlist('" + aktdir  + "');>" + aktdir + "</a></div>");

        Unabhängig davon, dass der Wert des href-Attributs besser in Anführungszeichen sollte: Du benutzt document.write innerhalb eines Event-Handlers. Das zerstört dir dein Dokument (das alte wird vollständig durch die neuen Ausgaben erstezt). Der Fehler kommt vermutlich daher, dass die Funktion getdirlist danach nicht mehr existiert.

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. ahhh check!

          dh ich werds komplett neu strukturieren ...
          jetzt leuchtet mir da einiges ein ;)

          thx

  2. Mahlzeit,

    funktioniert soweit, aber nach dem 2. aufruf bekomme ich diese ominöse fehlermeldung a la microsoft: objekt erwartet (zeile: 1, zeichen: 1, code: 0).

    Wieso benutzt Du zum Entwickeln bzw. Debuggen nicht einen geeigneten Browser mit vernünftiger Fehlerkonsole bzw. entsprechende AddOns, die Dir z.B. aussagekräftige Fehlermeldungen, den genauen Ort, wo der Fehler passiert, eventuelle Variableninhalte und - wie Harlequin schon ganz richtig bemerkte - vor allem die Rückgabe des AJAX-Aufrufs anzeigen?

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  3. Hi, du php-profi und js-noop *G*!

    (Meintest du eventuell noob="Neuling" anstelle von noop="no Operation")?
    In html ist es nötig, dass die id von Elementen eindeutig ist. Deshalb ist  es unzulässig, x-mal id="ordner" zu verwenden.
    Außerdem scheint es mir eher unschön, dass du nach jedem Öffnen eines Verzeichnisses dieses einfach mit auf die Seite "dazu klebst".
    Sollte das nicht anders aussehen?

    Sind nur mal erste Hinweise, weiteres wenn ich noch was sehe.

    Grüsse,
    Richard

    1. Hi, du php-profi und js-noop *G*!

      (Meintest du eventuell noob="Neuling" anstelle von noop="no Operation")?
      In html ist es nötig, dass die id von Elementen eindeutig ist. Deshalb ist  es unzulässig, x-mal id="ordner" zu verwenden.
      Außerdem scheint es mir eher unschön, dass du nach jedem Öffnen eines Verzeichnisses dieses einfach mit auf die Seite "dazu klebst".
      Sollte das nicht anders aussehen?

      Sind nur mal erste Hinweise, weiteres wenn ich noch was sehe.

      Grüsse,
      Richard

      als ex-assemblmer-programmer darf ich auch noop sagen ^^

      ja, ich hab auch bauchweh beim "dazukleben", wüsst aber nicht, wie ich auf die reaktion der abfrage eine "zeichne automatisch neu"-funktion schreib, ohne rekursiv zu programmieren ...

      1. Hi nochmal!

        ja, ich hab auch bauchweh beim "dazukleben", wüsst aber nicht, wie ich auf die reaktion der abfrage eine "zeichne automatisch neu"-funktion schreib, ohne rekursiv zu programmieren ...

        Die Möglichkeiten, die du hierfür in Javascript hast, sind [deinAusgabeElement].innerHTML="<div>...</div>" oder [deinAusgabeElement].appendChild(...)
        http://de.selfhtml.org/javascript/objekte/all.htm#inner_html
        http://de.selfhtml.org/javascript/objekte/node.htm#append_child

        Weiterhin:
        So wie ich verstehe, startest du deine Seite, erhältst einmal ein Listing zurück und sobald du versuchst, einen Directory Link zu betätigen kommt die Meldung?
        Lass dir doch mal per alert ausgeben, was zu Beginn von getdirlist in aktdir steht. Weiterhin denke ich, dass das einfache Anhängen von aktdir an deinen PHP Aufrufstring gefährlich sein könnte (Stichwort url encoding).

        Viele Grüsse,
        Richard

    2. ausserdem:

      In html ist es nötig, dass die id von Elementen eindeutig ist.

      ich verwende die ids einerseits zum ändern der eigenschaften via js und andererseits zum formatieren via css. deswegen hab ich die ids doppelt geschachtelt ...

      1. Hi!

        Öhhm... schon mal was von class (Attribut) gehört? Das ist perfekt um Klassen zu erzeugen, welche man mit CSS formatieren kann...

        Grüsse,
        Richard

        1. Hi!

          Öhhm... schon mal was von class (Attribut) gehört? Das ist perfekt um Klassen zu erzeugen, welche man mit CSS formatieren kann...

          Grüsse,
          Richard

          ^^ geht auch mit der id, aber ja, schon gehört g