Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [advAJAX] Przetwarzanie pobranego XMLa
Forum PHP.pl > Forum > XML, AJAX > AJAX
Seth
Do pobierania danych i wyswietlania go w tabeli uzywam zmodyfikowanego przykladu ze strony Anakina:
http://advajax.anakin.us/phpsolutions/2.html

Wszystko pieknei dziala ale mam jedno pytanie:
Dlaczego gdy XML nie jest w jednej linii nie zostaje sparsowany?


Mam takze jeden maly problem, takze z XMLem.
Po zmodyfikowaniu JSa:

Kod
    var currentPage = 0;
    var currentSort = "companyName";
    var currentSortOrder = "ASC";
    var maxPage;
    var defaultTableData;
    
    function $(id) {
        return document.getElementById(id);
    }
    
    function recordClick(obj) {
        alert(obj.id);        
    }
    
    function parseRecords(xml) {

        with (xml.getElementsByTagName("records").item(0)) {
            page = getAttribute("page")*1;
            maxPerPage = getAttribute("max_per_page");
            startId = maxPerPage*page+1;
            total = getAttribute("total")*1;
            maxPage = Math.ceil(total/maxPerPage);
        }
        
        
        $("btnFirst").style.visibility = $("btnPrev").style.visibility = page == 0 ? "hidden" : "visible";
        $("btnLast").style.visibility = $("btnNext").style.visibility = page+1 == maxPage ? "hidden" : "visible";
        
        d = $("dataTable");
        for (i = d.rows.length-1; i >= 0; i--)
          d.deleteRow(i);
        record = xml.getElementsByTagName("record");
        result = "";
        
        for (i = 0; i < record.length; i++) {
            tr = document.createElement("tr");
            td = document.createElement("td");
            

                 if (i % 2 == 0) {
                     tr.className = "dark";
                 } else {
                     tr.className = "light";
                 }

                for (j = 0; j < 5; j++) {
                if (j == 0) {
                    tr.id = record[i].childNodes[j].childNodes[0].nodeValue;;
                    tr.setAttribute('onclick', 'recordClick(this)');
                    tr.style.cursor = "pointer";
                } else {
                td = document.createElement("td");
                td.innerHTML = record[i].childNodes[j].childNodes[0].nodeValue;
                tr.appendChild(td);
                }
            }
            d.appendChild(tr);
        }

        return result;
    }
    
    function initSearchForm() {
        advAJAX.assign(document.getElementById("searchForm"), {
            onInitialization : function() {
                $("dataStats").innerHTML = '<span>Searching...</span>';
                $("btnPrev").style.visibility = "hidden";
                $("btnNext").style.visibility = "hidden";
                $("btnFirst").style.visibility = "hidden";
                $("btnLast").style.visibility = "hidden";
            },
            
            onSuccess : function(obj) {
                $("dataStats").innerHTML = "";
                parseRecords(obj.responseXML);
                       addTableRolloverEffect('resultTable','rollover','');
            },
            

        onError : function(obj) {
            alert('dupa');
        }
            
        });
    }


...IE przestalo mi parsowac XMLA (FF, Opera dziala w porzadku).
No i nie mam pojecia co tu jest nie tak, gdyz IE odebral porpawnie sformatowany XML, ale podczas parsowania wywala blad (typu 'null' is not defined).
anopak
w IE nie ma responseXML.... w IE trzeba sparsowac responseText do xml poprzez loadXML... czy naprawdę google jest tak trudne w użyciu?

przykład:
Kod
function getXML(x){
  if (typeof x.responseXML=='object'){
    if(x.responseXML.xml == '')
      x.responseXML.loadXML(x.responseText);
    return x.responseXML;
  }
  return null;
}
TomASS
To co powiesz na to, że ja używam coś takiego z powodzeniem pod IE tongue.gif

Kod
function parseRecords(xml) {

        with (xml.getElementsByTagName("records").item(0)) {
            page = getAttribute("page")*1;
            maxPerPage = getAttribute("max_per_page");
            startId = maxPerPage*page+1;
            total = getAttribute("total")*1;
            maxPage = Math.ceil(total/maxPerPage);
            $("dataStats").innerHTML =
              "Rekordy: " + startId + " - " + (startId+getAttribute("count")*1-1) + " z " + total + " (Strona: " +
              (page+1) + " z " + maxPage + ")";
        }
itd..

function getRecords() {
        advAJAX.get({
            url : "3.php",
            onSuccess : function(obj) {
                alert(obj.responseXML);
            }
        });
}
bigZbig
@Seth - a to Ci się dostało od kolegi anopaka winksmiley.jpg

Przeczytaj: Konwersja XML do tablicy w JavaScript (zastaosowanie w AdvancedAJAX) Może się przyda.
revyag
Cytat
Dlaczego gdy XML nie jest w jednej linii nie zostaje sparsowany?

tiraeth miał chyba podobny problem
http://forum.php.pl/index.php?showtopic=45569&hl=
anopak
@bigZbig rozumiem, gdy ktoś pyta na forum o problem nie spotykany zbyt często, ale jeśli to jest typowy problem, to czemu pierwsze nie skorzystać z pomocy googla? ja nikogo nie winie o pytanie o pomoc, ale niekiedy chyba można troche więcej wysiłku włożyć niż tylko napisanie posta...
Seth
@anopak: tego akurat nei musisz mi proponowac. Nie znalazlem wczesniej rozwiazania, wiec pisze tutaj.

Jeszcze poczytam to co podaliscie, ale chyba rozwiaze problem. Dzieki.
bigZbig
@Seth - problem tkwi w tym, ze biale znaki to tekst, ktory w xmlu musi byc przechowywany w jakims elemencie. Element ten jest wezlem tekstowym, ktory trzeba uwzglednic poruszajac sie po strukturze xml.

@anopak - widzisz ja akurat znam Setha - nie osobiscie - ale wiem, ze jest to facet, ktory natrafiajac na problem probuje go samodzielnie rozwiazac. Czasami zwyczajnie nie przychodzi czlowiekowi do glowy co wpisac w googlach, albo bladzi po omacku. Puki co z ludzmi latwiej sie dogadac.

-- edit --
@anopak - a swoja droga to Twoje rozwiazanie nie jest tak naprawde zadnym rozwiazaniem tylko obejsciem problemu. Jednak sprawa nie jest wcale tak banalna.
tiraeth
IE też parsuje mi XML używająć responseXML. Jedyny problem tkwił w tym, że nie chciał parsować gdy kodowanie było inne niż utf-8 smile.gif
Seth
@tiraeth: ha! dokladnie w tym lezal problem biggrin.gif

@bigZbig: probowalem uzyc tego przykladu ale nijak nie szlo z moimi danymi :/

Inna sprawa to taka, ze mocno zastanwaiam sie nad tym jaki typ danych zwracac.
Mam dane w postaci zagniezdzonych drzewek, ktore musze wyswietlic w roznych miejscach.
Szczerze mowiac mozna sie pochlastac z ta cala obsluga XMLa w JSie :///

Czy ktos z Was ma jakies doswiadczenia we wstawianiu danych z XMLa - z dosyc rozbudowanego - wprost w rozne elementy strony?
Mecze to od dwoch dni i idzie mi tak opornie, ze powoli sie zalamuje sad.gif
Na necie nie znajduje tongue.gif prostej odpowiedzi na to aby jak najwygodniej sobie z tym poradzic.

--------------------------------------------- EDIT

Sam odpowiem na swoje pytanie winksmiley.jpg

JSON - dzieki temu oraz php-json mozna sobie zaoszczedzic mase czasu i nerwow z parsowaniem XMLa. Iha biggrin.gif
Xionc
Panowie, męczyłem się z tym responseXML cały dzień. U mnie też pod FF wszystko działało, a pod IE nie tworzył obiektu XML. Rozwiązanie okazało się banalnie proste:
1. XML MUSI być poprawny.
2. trzeba w pliku php generującym XML'a wrzucić nagłówek:

header('Content-Type: application/xml');

...od razu zaczęło działać. (advAjax 1.1.2)
Nero12
http://www.sitemax.ovh.org/nero/index2.htm

Nadal nie bardzo wiem jak doprowadzic xhtml do formy zrozumialem dla IE abym mogl plynnie poruszac sie po jego strukturze :|
Xionc
XHTML? Hmm... ja wrzucam tylko czyste dane w XML i generuje z niego elementy xhtml'a. Ale może sie nie znam... tiredsmiley.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.