this.stringToDOM Problem

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

  • this.stringToDOM Problem

    hi Leutz ich habe mal wieder ein Problem mit diesem Code:

    Quellcode

    1. var ScourceWindow=Class.create();
    2. ScourceWindow.prototype = {
    3. //Initialisierungsmethode, baut ein QuellFenster in den Übergeben Div ein
    4. initialize: function(el, sUrl){
    5. alert('häää');
    6. this.el = $(el);
    7. this.windowBar =document.createElement("div");
    8. this.minimizeBtn = document.createElement("span");
    9. this.urlInput = document.createElement("div");
    10. this.urlField = document.createElement("form");
    11. this.scourceContent = document.createElement("div");
    12. this.scourceURL = sUrl;
    13. this.el.Obj = this;
    14. this.el.className="contentWindow";
    15. this.el.setAttribute("id","scource");
    16. //folded['scource']=1;
    17. this.windowBar.className = "titlebar";
    18. this.minimizeBtn.className = "titlebutton";
    19. this.minimizeBtn.setAttribute("id", "min")
    20. //this.minimizeBtn.setAttribute("onclick", "new Effect.ShrinkLeft(document.getElementById('scource'))");
    21. this.windowBar.appendChild(this.minimizeBtn);
    22. this.el.appendChild(this.windowBar);
    23. this.urlInput.className = "urlInput";
    24. this.urlField.innerHTML ='Quell-URL:<input type="text" id="inputScource">';
    25. this.urlInput.appendChild(this.urlField);
    26. this.el.appendChild(this.urlInput);
    27. this.scourceContent.className = "scourceContent";
    28. this.scourceContent.setAttribute("id","scourceContent");
    29. this.el.appendChild(this.scourceContent);
    30. this.loadContent(this);
    31. },
    32. //Setzt einen XMLHTTPREQUEST ab
    33. loadContent: function(){
    34. //alert(el.scourceURL);
    35. this.loader1=new net.ContentLoader( this.scourceURL, this.displayContent());
    36. },
    37. //Läd einen Request im Contentwindow
    38. displayContent: function(){
    39. var dom = this.stringToDOM(this.req.responseText);
    40. var test3 = dom.getElementById('content').innerHTML;
    41. $('scourceContent').innerHTML = test3;
    42. },
    43. [...]
    Alles anzeigen


    funzt alles fein, bis zu der Zeile. (var dom = this.stringToDOM(this.req.responseText);)
    Komm auch nicht wirklich mit dem this klar. denke ja das damit die instanz gemeint ist.
    er bekommt irgendwie nicht den Req des Contentloaders. Der ContentLoader schmeißt aber auch keine Errormessage.
    Ich denke, das dort irgend etwas mit dem this nicht funktioniert.

    Irgendwelche Anmerkungen


    Danke Cybo81
  • na das ding ist, dass ich nen XMLHTTPREQUEST auf eine normal htmplSeite mache. Also nicht Dom-tauglich. Deswegen ruf ich stringToDOM auf um den requestString in nen validen String zu machen.

    Weiß nicht wirklich was du mit innerDOM meinst. Auch der Link hilft mir nciht weiter :(.
    stringToDOM macht bei mir das:

    Quellcode

    1. stringToDOM: function(reqString){
    2. if(typeof DOMParser != "undefined"){
    3. return (new DOMParser).parseFromString(varString, "text/xml");
    4. }
    5. else if(typeof ActiveXObject != "undefined"){
    6. var parser = new ActiveXObject("Microsoft.XMLDOM");
    7. parser.async = "false";
    8. parser.loadXML(reqString);
    9. return parser;
    10. }else if (typeof XMLHttpRequest != "undefined") {
    11. var req2 = new XMLHttpRequest;
    12. req2.open("GET", "data:" + (contentType || "application/xml") +
    13. ";charset=utf-8," + encodeURIComponent(reqString), false);
    14. if (req2.overrideMimeType) {
    15. req2.overrideMimeType(contentType);
    16. }
    17. req2.send(null);
    18. return req2.responseXML;
    19. }
    Alles anzeigen


    Fehlermeldung ist, das var dom "undefined" ist und die Methode ist in der Klasse. Was mich verwundert (this.req.responseText) ist ebenfalls undefined :(.
  • ok den requestString bekomme ich jetzt. ber der Bildung des Req. habe ich als Parameter "this.displayContent()" angegeben, muss natürlich heißen "this.displayContent".
    aber die var dom bleibt immernoch undfined.
    Wenn ich mir an dieser Stelle "this" ausgeben lasse, dann ist es plötzlich das RequestObject mit onload, onerror usw. strange
  • achso, ich dachte du hättest die StringToDom Funktion von InnerDOM verwendet.
    stringToDOM ist ein XHTML zu DOM Konverter, der einen validen XHTML-String als Eingabe erwartet und ein DOM-Objekt zurück gibt. Dieses DOM-Aobjekt muss man nur noch mit appendChild einhängen. Der Aufruf als Methode ohne appendChild scheitert leider mal wieder am IE, der sich auch ansonsten sehr bockig zeigte.


    Den RequestString erhältst du also in this.req.responseText.
    Die ToDOM Funktion liefert aber wiederum keinen gültigen DOM. Soweit OK...

    Ist die Quelle überhaupt gültiger XHTML Code? Check die Quelle mal mit einem Validator. Ich denke es wird ein Fehler beim Parsen sein.
    Vielleicht taugt die Methode von InnerDOM für deinen Fall etwas...
  • war nen bissl mehr als tricky ....
    haute mit dem this nicht so ganz hin.

    Wenn ich eine Instanz des Requestobjektes mache, übergebe ich ja auch die Methode die aufgerufen werden soll.
    Und anschscheint ist simuliertes OO-JS nicht ganz so "clever" bzw. OO

    Die Erzeugung der Instaz schaut dann so aus.

    Quellcode

    1. var ref = this
    2. this.loader1 = new net.ContentLoader('url', function(){ref.displayContent(this.req);}, null, 'POST', para)


    nun ja strange aber funzt