Strings länger 4096?!
heavenkiller
- javascript
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
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
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
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