Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Konkretna wartość responseText
ukaszf9
post 29.05.2013, 13:42:41
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 3
Dołączył: 23.10.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post 29.05.2013, 13:44:17
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Użyj jQuery i sobie pobieraj co chcesz przy pomocy zwykłych selectorów jQuery


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
ukaszf9
post 29.05.2013, 13:58:18
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 3
Dołączył: 23.10.2011

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Crozin
post 29.05.2013, 14:44:39
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
ukaszf9
post 29.05.2013, 14:57:55
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 3
Dołączył: 23.10.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Crozin
post 29.05.2013, 15:53:56
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Przy pomocy innerHTML możesz wrzucić tekst zawierający HTML, ale nie obiekt DocumentFragment. Powinieneś skorzystać z appendChild().
Go to the top of the page
+Quote Post
ukaszf9
post 29.05.2013, 16:30:47
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 3
Dołączył: 23.10.2011

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Crozin
post 29.05.2013, 16:38:41
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
ukaszf9
post 29.05.2013, 19:37:07
Post #9





Grupa: Zarejestrowani
Postów: 33
Pomógł: 3
Dołączył: 23.10.2011

Ostrzeżenie: (0%)
-----


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? :/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:30