Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konkretna wartość responseText
Forum PHP.pl > Forum > XML, AJAX > AJAX
ukaszf9
Witam, jak odczytać konkretną wartość z responseText (np. div)?

Mam funkcję, które po wywołaniu przesyła mi dane z konkretniej strony(np. placek.php)
i teraz chce z tej strony wybrać konkretny zestaw, który mnie interesuje czyli divy o konkretnych klasach oraz ewentualnie znaczniki.
nospor
Użyj jQuery i sobie pobieraj co chcesz przy pomocy zwykłych selectorów jQuery
ukaszf9
Wiadomo, że przy użyciu jQuery to nie jest żaden problem ale chciałbym zobaczyć alternatywę dla samego czystego js.
Jest jakiś konkretny sposób?
Crozin
Zakładając, że w responseText masz kod HTML:
1. Tworzysz na jego podstawie nowy Document bądź DocumentFragment - najłatwiej będzie to zrobić przez innerHTML (i kilka "tricków" dla jego poprawnej obsługi w starszych wersjach IE). Dzięki temu całą pracę związaną z przetworzeniem tekstu na drzewo DOM zrzucisz na przeglądarkę.
2. Przy pomocy querySelector albo "zwykłych" metod DOM-u wybierasz interesujący Cię fragment.
ukaszf9
Próbowałem sposobem powyżej tylko zamiast documentFragment używałem div'a ale i tak rezultat w tym przypadku jest identyczny.

Kod
if (ajax.readyState==4 && ajax.status==200)
{
   var top = document.createDocumentFragment();
   top.innerHTML = ajax.responseText;
   document.getElementById("announce").innerHTML = top;
}

Wynikiem dla tego jest [object DocumentFragment] zamiast wartość responseText. Nie mam pojęcie dlaczego.
Crozin
Przy pomocy innerHTML możesz wrzucić tekst zawierający HTML, ale nie obiekt DocumentFragment. Powinieneś skorzystać z appendChild().
ukaszf9
Kod
if (ajax.readyState==4 && ajax.status==200)
{
   var top = document.createDocumentFragment();
   top.innerHTML = ajax.responseText;
   document.getElementById("announce").appendChild(top);
}

Konsola nie wyrzuciła mi żadnych błędów ale wyniku również.
W pierwszej linijce tworzę DocumentFragment, w drugiej wstawiam do niego treść, a w trzeciej chce tą treść wyświetlić, która jest wstawiona w top.
Nadal nie rozumiem co tu jest nie tak facepalmxd.gif
Crozin
Mały błąd z mojej strony. Nie możesz skorzystać z innerHTML bezpośrednio na obiekcie DocumentFragment. Jednym z najłatwiejszych objeść jest umieszczenie we fragmencie jakiegoś elementu i skorzystanie z innerHTML tego elementu:
[JAVASCRIPT] pobierz, plaintext
  1. var frag = document.createDocumentFragment();
  2. frag.appendChild(document.createElement("div"));
  3. frag.firstChild.innerHTML = response;
  4.  
  5. document.getElementById("...").appendChild(frag.querySelector("..."));
[JAVASCRIPT] pobierz, plaintext
ukaszf9
Faktycznie teraz wszystko działa aczkolwiek napotkałem kolejny problem, analizowałem kod kilka razy i szczerze nie mam pojęcia czy to kwestia serwisu czy jakieś gafy u mnie.
http://www.test-chat.pun.pl/userlist.php - z tej listy chce pobrać 6 nicków oraz ich odpowiednik postów

Używam następującego kodu:

Kod
<div id="myDiv"></div>
<script type="text/javascript">
/*
Wyświetlanie top posterów
w zależności od ustawionej liczby
(i=15) za 15 liczbę posterów
odjąć jeden bo odliczanie od 0
*/

var ajax;
if (window.XMLHttpRequest)
{
    ajax=new XMLHttpRequest();
}
else
{
    ajax=new ActiveXObject("Microsoft.XMLHTTP");
}

ajax.open("GET","userlist.php?username=&show_group=-1&sort_by=num_posts&sort_dir=DESC",true);
ajax.onreadystatechange=function()
{
    if(ajax.readyState==4 && ajax.status==200)
    {
        var top = document.createElement("div");
        top.appendChild(document.createElement("div"));
        top.firstChild.innerHTML = ajax.responseText;
        for(i=0;i<=5;i++)
        {
            document.getElementById("myDiv").appendChild(top.getElementsByTagName("tbody")[0].getElementsByClassName("tcl")[i].getElementsByTagName("a")[0]);
            document.getElementById("myDiv").appendChild(top.getElementsByTagName("tbody")[0].getElementsByClassName("tc3")[i]);
        }
    }
}
ajax.send(null);
</script>


Niestety zamiast otrzymać wynik z 6 nickami i 6 wartościami w postach otrzymuje coś takiego:
123
312
Administrator
2
Test0
124

Zresztą wynik można zobaczyć w stopce. Jakieś sugestie? :/
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-2024 Invision Power Services, Inc.