heavenkiller: Strings länger 4096?!

Servus zusammen!

Ich bin gerade dabei mich in die Welt von JS einzufuchsen, da ich für eine Projektarbeit etwas mit AJAX programmieren soll.

Bislang funktionierte auch alles zufriedenstellend und reibungslos. Nun bin ich jedoch auf ein kleines Problem gestoßen: Anscheinend werden nur maximal 4096 Zeichen in einem String gespeichert...

Hintergrund:
Ich frage per GET-Methode und dem Einsatz von AJAX eine XML-Datei ab, die dynamisch von PHP generiert wird. Rückgabe ist eine XML-Datei mit ein paar Header-Daten und einem Datenbereich (zumindest bei Inhaltsseiten). In dem Datenbereich steht meistens ein sehr langer Text (auch mal 1-2 HTML-Tags), der in meinem Problemfall nun 4096 Zeichen übersteigt und unvollständig angezeigt wird.

Gibt es eine Möglichkeit entweder die Größe des Strings zu ändern oder einen programmiertechnischen Kniff, der sich einem JS Anfänger verbirgt?

Hoffe auf eure Hilfe!
Heaven

  1. Hallo heavenkiller,

    Anscheinend werden nur maximal 4096 Zeichen in einem String gespeichert...

    Nein. Ein kleiner Versuch zeigt - getestet mit Opera9 - das die Grenze weit höher liegt:

      
    <textarea rows="20" cols="50"></textarea>  
      
    <script type="text/javascript">  
    var str = ""  
    while (str.length <5000){  
      str += "a";  
      if (str.length%25==0)  
     str += "\n";  
    }  
      str += " Ende";  
    document.getElementsByTagName("textarea")[0].value = str;  
    window.alert(str.length)  
    </script>
    

    Hintergrund:
    Ich frage per GET-Methode und dem Einsatz von AJAX eine XML-Datei ab, die dynamisch von PHP generiert wird.

    Dann liest Du doch diese Datei nicht als String ein, sondern nutzt responseXML, oder?

    Mit freundlichem Gruß
    Micha

    --
    LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein
    1. Hallo Micha!

      Danke für deine Antwort!
      Dein JS-Script funktioniert auch bei mir. Also vllt. doch eine Beschränkung von XML?!

      Dann liest Du doch diese Datei nicht als String ein, sondern nutzt responseXML, oder?

      Richtig. Gibt es dabei Probleme oder eine Beschränkung?

      Habe jetzt einfach mal 2 Alerts eingebaut und frage damit per "typeof" den Variablentyp meiner Variablen UND des Wertes der XML ab. Beides leifert mir als Ergebnis einen String.

      alert("DATA: "+typeof XMLcontent);
      bzw.
      alert("xmlTag: "+typeof xmlTags[0].firstChild.nodeValue);

      Mache ich etwas falsch?

      Gruß
      Steffen

      1. Hallo Steffen,

        Beschränkung von XML?!

        Ja, so scheint es. Ich habe folgendes probiert:

          
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
        <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" xml:lang="de">  
         <head>  
          <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />  
          <script type="text/javascript">  
        [code lang=javascript]  
          function readXML(uri){  
           var xmlHttp = false;  
           if (typeof(XMLHttpRequest) != "undefined") {  
            try {  
             xmlHttp = new XMLHttpRequest();  
            } catch(e) {  
             xmlHttp  = false;  
            }  
           }  
           if (!xmlHttp) {  
            try {  
             xmlHttp  = new ActiveXObject("Msxml2.XMLHTTP");  
            } catch(e) {  
             try {  
              xmlHttp  = new ActiveXObject("Microsoft.XMLHTTP");  
             } catch(e) {  
              xmlHttp  = false;  
             }  
            }  
           }  
           if (xmlHttp) {  
            xmlHttp.open("GET", uri, true);  
            xmlHttp.setRequestHeader('Cache-Control', 'no-cache');  
            xmlHttp.send(null);  
            xmlHttp.onreadystatechange = function () {  
             if (xmlHttp.readyState == 4) {  
              getXML(xmlHttp.responseXML);  
              getText(xmlHttp.responseText);  
              xmlHttp.abort();  
             }  
            };  
           }  
          }  
          function getXML(XMLObj){  
           document.getElementsByTagName("textarea")[0].value = XMLObj.getElementsByTagName("text")[0].firstChild.nodeValue;  
           alert(XMLObj.getElementsByTagName("text")[0].firstChild.nodeValue.length);  
          }  
          function getText(text){  
          
           document.getElementsByTagName("textarea")[1].value = text;  
           alert(text.length);  
          
           if(window.DOMParser) {  
            parser = new DOMParser();  
            xmlobject=parser.parseFromString(text,"text/xml");  
            alert(xmlobject.getElementsByTagName("text")[0].firstChild.nodeValue.length);  
           }  
          }  
          window.onload = function() { readXML("test.xml"); };
        

        </script>
         </head>

        <body>
          <textarea rows="25" cols="40"></textarea>
          <textarea rows="25" cols="40"></textarea>
         </body>
        </html>
        [/code]

        Die XML-Datei sah einfach so aus, woebi text mehr als 5000 Zeichen enthält:

          
        <?xml version="1.0" encoding="ISO-8859-1"?>  
          
        <root>  
          
        <text>aaaaaaaaaaaaaaaaaaaaaaaaa  
          
        ....  
          
        aaaaaa</text>  
        </root>
        

        Die alerts im FF:
        4096 --> XML-Element => unvollständig
        5288 --> String => vollständig
        4096 --> String2XML => unvollständig

        im Opera:
        5006 --> XML-Element => vollständig
        5288 --> String => vollständig
        5006 --> String2XML => vollständig

        Es gibt also nur ein Problem im Firefox, wobei er das vollsändige Dokument problemlos einlesen kann.

        Mache ich etwas falsch?

        Ich denke nein.

        Mit freundlichem Gruß
        Micha

        --
        LeagueEditor JavaScript kostenlose Ligaverwaltung || richtig Messen will gelernt sein