Witam.
Tworzę witrynę z obsługą bloga przy pomocy dokumentów XML i Ajaxa (wszystko w Javascripcie). Mam kod JSa, który wysyła zapytanie do serwera o odczytanie pliku XML:
function zapytajSerwer()
{
if(window.XMLHttpRequest)
{
request=new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
request = new ActiveXObject("Microsoft.XMLHTTP");
}
if(request)
{
//cała procedura składania zapytania
request.open("GET",'blog.xml',true);
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
request.onreadystatechange = function()
{
if(request.readyState==4)
{
xml=request.responseXML;
opracuj();
}
}
//wysłanie przygotowanego zapytania
request.send(null);
}
else
//jakby ktoś nie obsłużył Ajaxa
alert('Twoja przeglądarka nie obsługuje Ajaxa. Zaktualizuj ją.');
}
po otrzymaniu odpowiedzi w postaci xml, zawartość jest zapisywana do zmiennej o nazwie xml i wywoływana jest funkcja opracuj();
function opracuj()
{
wpisy=xml.getElementsByTagName('wpis');
for (var i=0;i<wpisy.length;i++)
{
var divolong=document.createElement("div");
divolong.setAttribute("class","wpisowe");
divolong.setAttribute("id","wpis"+i);
poleWpisow.appendChild(divolong);
divolong=document.getElementById("wpis"+i);
divolong.style.display="block";
divolong.style.width=parseInt(poleWpisow.style.width)-200;
var a=wpisy[i].getElementsByTagName('tytul');
var tytul=a[0].firstChild.nodeValue;
a=wpisy[i].getElementsByTagName('data');
var data=a[0].firstChild.nodeValue;
a=wpisy[i].getElementsByTagName('tresc');
if (i==2) {alert(a[0].firstChild.nodeValue);}
var tresc=a[0].firstChild.nodeValue;
document.getElementById("wpis"+i).innerHTML=tytul+'<br>'+data+'<br>'+'<p style="font-family:\'Arial\';font-size:8">'+tresc+'</p>';
}
}
funkcja ta ma za zadanie dla każdego wpisu (wykorzystanie pętli) stworzyć dodatkowego diva wewnątrz 'poleWpisow' i umieścić w nim odpowiednio sformatowany tekst wpisu (tytuł, datę oraz treść).
Zarówno XML, jak i wszystkie pozostałe pliki są kodowane w UTF-8.
Najważniejsze - problem polega na tym, że treść długich wpisów jest ucinana (długie tj. powyżej 4000 znaków) - im dłuższy tekst, tym większa część jest ucięta (ale nie jest tak, że wyświetlane jest zawsze tyle samo znaków). Przy kilkukrotnym odświeżaniu strony, zdarza się, że ucięty tekst jest jeszcze większy, a przy kolejnym wraca do 'normalnego stanu ucięcia'.
Chcąc sprawdzić czy ucięcie tekstu następuje na poziomie funkcji opracuj() czy może w zapytaniu, funkcję zapytajSerwer() wzbogaciłem o jeszcze jedną linijkę:
var wpis=xml.getElementsByTagName('tresc'); alert(wpis[2].firstChild.nodeValue);
(umieszczona zaraz po przypisaniu odpowiedzi do zmiennej xml).
Jednak w okienku, które się pojawiło, znów wyskoczył obcięty tekst.
Jak sobie z tym poradzić?