[javascript] Ucięty XML

0

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ć?

0

Już znalazłem rozwiązanie. Okazało się, że parser XML ma ograniczenie do 4KB w jednym nodzie. Porozbijałem tekst na akapity i umieściłem je w osobnych węzłach. Potem przy wyświetlaniu łącze je razem. Działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1