Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Prototype][JSON] Ajax.Request i głupie .each
Victor152
post 23.08.2010, 23:35:38
Post #1





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

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


Na początku jak jest teraz i działa.
PHP generuje mi coś w stylu:
Kod
[{"address":"127.0.0.1:27015","hostname":"Orzeszek #1 FFA [s+ns] (only de_dust2)","map":"de_dust2"}]


Kod js, który to obrabia:
[JAVASCRIPT] pobierz, plaintext
  1. function updateServersStats() { new Ajax.Request('/serversstats.php', {
  2. 'method': 'get',
  3. onSuccess: function(transport) {
  4. var json = transport.responseText.evalJSON();
  5.  
  6. string = '';
  7. $H(json).each(function(server)
  8. {
  9. string += 'blablabla. kazdy element tablicy ma swoje blablabla';
  10. })
  11.  
  12. $('cat_serversstats_e').innerHTML = string;
  13. }); }
  14. updateServersStats();
[JAVASCRIPT] pobierz, plaintext


Lecz, gdy zmienie troche kod, zamiast enkodowania:
  1. $servers_s[] = array($gametype, $b[0], $b[1]);

Dam np...
  1. $servers_s[$server['address']] = array($gametype, $b[0], $b[1]);


A wtedy JSON zamienia sie na:
Kod
{"91.121.112.144:27015":{"address":"127.0.0.1:27015","hostname":"Orzeszek #1 FFA [s+ns] (only de_dust2)","map":"de_dust2"}}


To już powyższy kod js, obrabiający JSONa nie działa. Podejrzewam, że te each coś nie działa.

Macie jakieś rozwiązanko?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
pepkin88
post 24.08.2010, 00:33:50
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.08.2010

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


Tak naprawdę, to pierwszy JSON powinien być niewłaściwie parsowany.
Zauważ, że w pierwszym przypadku masz tablicę z jednym elementem: obiektem.
W drugim masz już obiekt (tablicę asocjacyją).

Zatem w pierwszym przypadku $H(tablica).each przeleci nie tylko po iteracjach tablicy, ale także po wszystkich metodach obiektu typu tablica (Array), których Prototype trochę dodał.

Ten post edytował pepkin88 24.08.2010, 00:34:16
Go to the top of the page
+Quote Post
everth
post 24.08.2010, 00:35:39
Post #3





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


Może to ci coś pomoże - zamiast each():
[JAVASCRIPT] pobierz, plaintext
  1. for (key in json) {
  2. server = json[key];
  3. string += 'blablabla. kazdy element tablicy ma swoje blablabla';
  4. }
[JAVASCRIPT] pobierz, plaintext


@DOWN: Tak więc problem specyficzny dla Prototype. Nie używałem i sugerowałem się składnią jQuery.

Ten post edytował everth 24.08.2010, 13:57:22


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
pepkin88
post 24.08.2010, 00:39:13
Post #4





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.08.2010

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


Efekt będzie taki sam. Jeżeli for in przeleci po tablicy to uwzględni też wszystkie metody dodane do prototypu Array, a biblioteka Prototype takowe dodała.

Należy więc uważać i stosować $A i $H odpowiednio dla tablic i obiektów (tablic asocjacyjnych, hash tablic).

PS: Wszystkie zmienne deklaruj przez var, dzięki temu będą one miały zasięg prywatny, a nie globalny.

Ten post edytował pepkin88 24.08.2010, 00:40:19
Go to the top of the page
+Quote Post
Victor152
post 24.08.2010, 08:35:56
Post #5





Grupa: Zarejestrowani
Postów: 105
Pomógł: 3
Dołączył: 26.02.2008

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


Tak, więc zmiana w "źródle", żeby była tabliczka asosacyjna (tj. to opisywałem), potem zmiana H na A i powinno działać?
W każdym bądź razie o dziwo tak nie jest. Czy H, czy A, to i tak kod wewnątrz pętli .each się nie wykonuje. Nie wazne czy to alert(server), czy to alert("test123");.
Po prostu nic.

#Edit:
A raczej nazwy nie podobają mu się jako klucze kolejnych tablic. Numerki bez problemu.


Jednak nadal są problemy, nawet z liczbami.

Ten post edytował Victor152 24.08.2010, 09:11:09
Go to the top of the page
+Quote Post
pepkin88
post 24.08.2010, 14:12:46
Post #6





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 24.08.2010

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


Na odwrót: $A - Array - do tablic; $H - Hash - do tablic asocjacyjnych.

Więc piszesz, że nic się nie wyświetla?
Sprawdź, np. alertem, czy i w jakiej postaci jest przesyłany ten JSON ( alert(transport.responseText); ).

Bo kod jest dobry (jeżeli A i H nie są pomylone) i powinno to działać (u mnie działa, po przepisaniu samego JSONa - nie symulowałem samej ajaxowej transakcji).

Aha, jeszcze pamiętaj o średnikach, teoretycznie JavaScript sam uzupełnia brakujące średniki, ale nie zawsze podejmie właściwą decyzję, czy rzeczywiście tego średnika brakuje, czy nie ma go tam być.

Ten post edytował pepkin88 24.08.2010, 14:17:35
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: 19.07.2025 - 20:47