ďťż
Podstrony
|
telcocafeWitam.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ć? Już odkryłem w czym problem - parser nie chciał przyjąć więcej niż 4kb danych w jednym węźle pliku XML. Podzieliłem więc tekst na akapity i umieściłem w osobnych węzłach (z nadzieją, że nie zrobię akapitu większego niż 4kb). Potem już po odebraniu pliku XML skrypt sam 'skleja' tekst z powrotem. |
|||
Sitedesign by AltusUmbrae. |