Text wird abgeschnitten?
Hirse
- javascript
Grüßt euch!
Ich habe hier ein Problem, das mir langsam jeden Nerv raubt.
Via Ajax möchte ich gerne einen request schicken und als Antwort quasi den Content erhalten. Soweit funktioniert das auch 1a.
Also funktionell gehts... bis auf ein Detail.
Jede Antwort, wird auf 4099 Zeichen abgeschnitten. Mehr schreibt mir innerHTML nicht in den Container.
Firebug zeigt an, das der Request ordnungsgemäß geschickt wurde und die Antwort auch in voller Länge erhalten ist.
Rufe ich die Antwortseite unabhängig auf, wird mir auch die komplette XML Antwort angezeigt.
Nur wie gesagt, innerHTML hört bei 4099 Zeichen auf. Hat jemand diese Erfahrung schon gemacht? Oder eine Idee?
Wenn nötig, stelle ich auch Code zur verfügung.
Hi,
Nur wie gesagt, innerHTML hört bei 4099 Zeichen auf. Hat jemand diese Erfahrung schon gemacht? Oder eine Idee?
Kann ich nicht nachvollziehen.
Per Schleife einen Teststring erzeugt, über 5000 Zeichen, eindeutige Zeichenkette zur optischen Kontrolle ans Ende gepackt - per innerHTML einem P-Element zugewiesen, klappt problemlos.
Über 50.000 Zeichen, kein Problem - genauso wie 500.000 oder 5.000.000 Zeichen.
(Getestet in FF 3.6.9, Win 7)
Dein Problem muss woanders liegen.
MfG ChrisB
Danke für die Antwort. Dann will ich mal ein wenig Code rausrücken... vllt sieht ja jemand den Fehler, den ich nicht finde.
Der JS Code:
var text = 0;
var request = false;
function setRequest(mache, nameid, pass, eintrag) {
var mach = mache;
var nummer = nameid;
var pw = pass;
var schreibe = eintrag;
document.getElementById('lade').style.display='';
if (window.XMLHttpRequest) {
request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
request = new ActiveXObject('Msxml2.XMLHTTP');
} catch (e) {
try {
request = new ActiveXObject('Microsoft.XMLHTTP');
} catch (e) {}
}
}
if (!request) {
alert("Kann keine XMLHTTP-Instanz erzeugen");
return false;
} else {
if(mach != '2') {
var url = "./answer.php";
request.open('post', url, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send('number='+nummer);
request.onreadystatechange = interpretRequest;
} else {
var url = "./write.php";
request.open('post', url, true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
request.send('number='+nummer+'&pw='+pw+'&schreibe='+schreibe);
request.onreadystatechange = interpretRequest;
}
}
}
function interpretRequest() {
switch (request.readyState) {
case 4:
if (request.status != 200 && request.status != 0) {
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
} else {
var xmlDoc = request.responseXML;
var text = xmlDoc.getElementsByTagName('answer').item(0).firstChild.data;
var text = text.replace(/\[br\]/g,"<br>");
var text = text.split("#END#");
var postit = '';
for each (var entry in text) {
if (entry != '') {
postit += entry+'<br><br><hr style="border: 0px; border-top: solid 2px #301515; border-bottom: transparent;"><br><br>';
}
}
document.getElementById('content').innerHTML = postit;
document.getElementById('lade').style.display='none';
}
break;
default:
break;
}
}
Antwortdatei funktioniert ja Fehlerfrei.
Die anderen Dinge, funktionieren bei kurzem Text auch ohne Fehler.
Hi,
Dann will ich mal ein wenig Code rausrücken...
Online-Beispiel zum selber testen wäre mir lieber ...
MfG ChrisB
Hi,
Dann will ich mal ein wenig Code rausrücken...
Online-Beispiel zum selber testen wäre mir lieber ...
MfG ChrisB
Ich kann leider keine Private Nachricht verschicken
Hi,
Online-Beispiel zum selber testen wäre mir lieber ...
Ich kann leider keine Private Nachricht verschicken
Das macht nichts - wir können ja hier kommunizieren.
Außerdem gibt's hier noch einen Haufen anderer Mitleser, die ggf. was dazu sagen können.
Wenn sensible Daten deine Sorge sind - dann anonymisiere diese vorher.
MfG ChrisB
Hi,
Online-Beispiel zum selber testen wäre mir lieber ...
Ich kann leider keine Private Nachricht verschicken
Das macht nichts - wir können ja hier kommunizieren.
Außerdem gibt's hier noch einen Haufen anderer Mitleser, die ggf. was dazu sagen können.
Wenn sensible Daten deine Sorge sind - dann anonymisiere diese vorher.
MfG ChrisB
Nun gut.
Hi,
404 not found
cu,
Andreas
Hi nochmal
[... ]style="border: 0px; border-top: solid 2px #301515; border-bottom: transparent;"><br><br>';
}
Muss es nicht "border-bottom-color: transparent;" heißen. Und war es da nicht so, das ein IE nicht problemlos "Transparent" versteht?
Du sagst extern würde es gehen, nur über Alax nicht. Ruft dein Ajax vielleicht ein anderes Stylesheet oder Style-Funktionen auf?
Es muss mit dem DIV zu tun haben. Innerthtml hat soweit ich weis keine Zeichenbegrenzung bei 4099 Zeichen...
Gruß
Gary
Muss es nicht "border-bottom-color: transparent;" heißen. Und war es da nicht so, das ein IE nicht problemlos "Transparent" versteht?
Du sagst extern würde es gehen, nur über Alax nicht. Ruft dein Ajax vielleicht ein anderes Stylesheet oder Style-Funktionen auf?
Es muss mit dem DIV zu tun haben. Innerthtml hat soweit ich weis keine Zeichenbegrenzung bei 4099 Zeichen...
Gruß
Gary
Danke für den Hinweis. Werde ich anpassen.
Aber nein, es ruft kein anderes Stylesheet und keine anderen Style-Funktionen auf.
@@Gary:
nuqneH
[... ]style="border: 0px; border-top: solid 2px #301515; border-bottom: transparent;"><br><br>'; }
Muss es nicht "border-bottom-color: transparent;" heißen.
Was das eine Frage.
'border-bottom: transparent' setzt nicht nur die Rahmenfarbe, sondern auch Rahmenbreite und Rahmenstil. „Weggelassene Werte werden auf ihre Ausgangswerte gesetzt.“ [CSS2 §8.5.4]
Und war es da nicht so, das ein IE nicht problemlos "Transparent" versteht?
Ja.
Qapla'
Hi,
function interpretRequest() {
switch (request.readyState) {
case 4:
if (request.status != 200 && request.status != 0) {
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
} else {
var xmlDoc = request.responseXML;
var text = xmlDoc.getElementsByTagName('answer').item(0).firstChild.data;
Das answer-Element hat an dieser Stelle *zwei* Kindknoten, zwei Textknoten.
Ja, und jetzt erinnere ich mich dunkel, dass wir sowas hier irgendwann schon mal hatten - 4096 Zeichen sind im Firefox die Maximallänge, die ein Textknoten haben kann. Bei allem, was darüber hinaus geht, splittet er das einfach in mehrere Textknoten auf.
Nehme also an dieser Stelle nicht nur den Inhalt des firstChild, sondern durchlaufe alle childNodes des answer-Elements, und hänge ihren data-Inhalt in text hintereinander - dann sollte sich dein Problem erledigt haben.
MfG ChrisB
Nehme also an dieser Stelle nicht nur den Inhalt des firstChild, sondern durchlaufe alle childNodes des answer-Elements, und hänge ihren data-Inhalt in text hintereinander - dann sollte sich dein Problem erledigt haben.
Ok... jetzt steh ich glaube ich ein wenig im Wald...
wie? o.O xD
Hi,
Nehme also an dieser Stelle nicht nur den Inhalt des firstChild, sondern durchlaufe alle childNodes des answer-Elements, und hänge ihren data-Inhalt in text hintereinander - dann sollte sich dein Problem erledigt haben.
Ok... jetzt steh ich glaube ich ein wenig im Wald...
wie?
Schleifchen über childNodes.
MfG ChrisB
Hi,
Nehme also an dieser Stelle nicht nur den Inhalt des firstChild, sondern durchlaufe alle childNodes des answer-Elements, und hänge ihren data-Inhalt in text hintereinander - dann sollte sich dein Problem erledigt haben.
var text = xmlDoc.getElementsByTagName('answer').item(0).textContent;
könntest du auch nehmen, das enthält den kompletten Text - aber textContent ist wieder mit anderen Browsern nicht kompatibel.
Du könntest auch von dem und firstChild.data das mit der größeren Länge nehmen; aber vermutlich ist es besser, einfach die Inhalte aller Textknoten aneinander zu hängen - dann hast du auch kein Problem, wenn andere Browser ähnliche Limits implementiert haben oder das irgendwann mal tun sollten.
MfG ChrisB
Und wie hänge ich diese aneinander?
Habe ich noch nie mit zu tun gehabt... :/
Hi,
Und wie hänge ich diese aneinander?
Habe ich noch nie mit zu tun gehabt... :/
Ach komm, das ist jetzt aber bisschen albern ... wenn du mit AJAX arbeitest, dürfen doch solche Grundlagen kein Problem sein?
Und in deinem Script hast du den Operator += auch schon benutzt, also erzähl jetzt bitte nicht du wüsstest nicht, wie man Strings hintereinander hängt.
MfG ChrisB
Nein, das meinte ich nicht. Aber dein anderer link hat die Frage schon beantwortet.
Danke für die Hilfe (um die Zeit ^^)
Hi,
Nehme also an dieser Stelle nicht nur den Inhalt des firstChild, sondern durchlaufe alle childNodes des answer-Elements, und hänge ihren data-Inhalt in text hintereinander - dann sollte sich dein Problem erledigt haben.
So kompliziert muss man es gar nicht machen - die Methode normalize des Node-Objektes, dass die Textknoten enthält (in deinem Fall answer[0]) aufzurufen, sollte auch ausreichen, um aus mehreren adjacent text nodes genau einen zu machen.
(Ich habe dies bei meinem Beispiel ausprobiert, aus mehreren Textknoten macht der Firefox dann genau einen, mit Firebug leicht zu kontrollieren. Dein Beispiel hast du ja schon wieder entfernt, aber da sollte es ebenso funktionieren.)
MfG ChrisB
Hi Hirse,
Kann viele Gründe haben:
Div zu klein?
Im CSS vielleicht das DIV festzementiert auf eine bestimmte Grösse?
Probier mal mit auto oder setze den Wert viel höher als du benötigtst.
Könnte ein CSS- bedingtes Problem sein - so von hier aus aus der Kristallkugel...
Gruß
Gary
Danke, aber das div ist korrekt eingestellt. Overflow ist auf auto und es ist aureichend groß ;) Der Text hört ziemlich genau in der Mitte der Zeile einfach auf. Halt genau nach 4099 Zeichen.
<div id="content" style="position: absolute; padding: 0px; margin: 0px; left: 350px; top:50px; right: 100px; bottom: 50px; background-image: url(./pic/50percent.png); background-color: transparent; color: #bbbbbb; border: 3px solid #301515; overflow: auto;">
Willkommen...
</div>