![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
łącze się z takim problemem iż mam funkcję do której przekazuję tablicę jako parametr, a dokładnie tablicę parametrów np: Kod var params = new Array(); params['p1'] = 1; params['p2'] = 2; params['text'] = 'text'; params['last_param'] = 0; function postParams( params ) { var params_string = ""; for(name in params) { params_string += "&"+name+"="+params[name]; } // i dalej przesylamy ajaxem parametry... } problem polega na tym, że w tej tablicy czasem w ostatnim elemencie przesyłają się nieporządane dane, typu params['nazwa_jakiejś_funkcji'] = cialo_jakiejś_funkcji ![]() Kod ajax_post.php?p1=1&p2=2&text=text&remove=function (b) { var a = this.indexOf(b); if (a != -1) { this.splice(a, 1); } return this; }&sortDates=function () { return this.sort(function (a, b) {return a.getTime() - b.getTime();}); }&last_param=0 i z niewinnie wyglądającej tablicy tworzy mi się jakiś potwór!? ![]() Czy to może być związane z przeglądaniem tablicy for'em ? Jak to jest możliwe że w wyjściowym stringu oprócz zdefiniowanych parametrów mam jeszcze jakiś szit? Z góry dzięki za odp! Pozdrawiam. Ten post edytował iwosz 28.01.2011, 13:28:06 -------------------- Pozdrawiam,
iwosz. |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Ponieważ zwraca Tobie też metody obiektu Array, możesz dać warunek że tylko gdy name jest stringiem, lub użyć normalnej konstrukcji for'a.
Ten post edytował melkorm 28.01.2011, 13:37:13 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
http://wstaw.org/m/2011/01/28/js.png coś knocisz.
-------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ponieważ zwraca Tobie też metody obiektu Array, możesz dać warunek że tylko gdy name jest stringiem, lub użyć normalnej konstrukcji for'a. Hmm, no tak ale czemu zmienna 'params' przechowuje tez te metody jako kolejne wartości tablicy? Rozumiem że to jest instancja typu Array i można dla niej wywołać dane metody, ale to nie powinno wpływać na wartości tablicy, czy nie mam racji? Co do zwykłego for'a to jak mogę odczytać indeksy tablicy aby skleić poprawny string z parametrami bo nie widzę tego w dokumentacji JS? Poza tym skoro tablica zawiera także metody obiektu Array to nie ważne w jaki sposób będziemy tą zmienna przeglądać, zawsze natrafimy na te niechciane rekordy, tak? czyli gdybyśmy użyli PHP'owej funkcji print_r() na zmiennej 'params' otrzymali byśmy: Kod params => Array( 'p1' => 1, 'p2' => 2, 'text' => 'text', 'remove' => function() { .. }, 'sortDates' => function() { .. } ) tak? to jakiś absurd... ![]() Dzięki za odp! ![]() ps. cojack: hmm, też mi się wydaję że powinno być tak jak u Ciebie, to logiczne, zastanawiam się czy może zmienna 'params' nie jest nadpisywana gdzieś wcześniej w kodzie, szukam... Ten post edytował iwosz 28.01.2011, 13:53:11 -------------------- Pozdrawiam,
iwosz. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Hum, pomyliłem się, ale to z pośpiechu bo też kiedyś miałem taki problem, ale teraz testuję i za nic nie mogę uzyskać tego samego, możliwe że tej zmiennej params są przypisane jakieś metody gdzieś?
Może używasz jakiegoś FW do JS'a? Edit: no i już wiem, najwidoczniej Prototype dopisuje swoje metody do obiektu Array stąd takie błędy ![]() ![]() Ten post edytował melkorm 28.01.2011, 14:04:48 -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
no i już wiem, najwidoczniej Prototype dopisuje swoje metody do obiektu Array stąd takie błędy ![]() Hm, no tak, ale czemu wartości tablicy są nadpisywane? Zastanawia mnie jak to jest możliwe i czy powinno tak być... Zmień Framework na jQuery i będzie git ![]() Akurat korzystam z jQuery ![]() Ten post edytował iwosz 28.01.2011, 14:17:57 -------------------- Pozdrawiam,
iwosz. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Cytat tak? to jakiś absurd... To jest normalne zachowanie - tablica w JS nie przechowuje pary klucz=>wartość, tylko same wartości (z liczbą porządkową jako kluczem), gdy ty próbujesz coś takiego
to masz tablicę. Gdy robisz tak:
To już nie przyporządkowujesz wartości w tablicy, tylko właściwości obiektu typu Array. A to już zupełnie inna rzecz. Pętla for () in () działa tutaj dlatego że przechodzi przez wszystkie metody i właściwości w obiekcie (bez znaczenia na klasę). Sprawdź sobie wartość length tej tablicy - powinieneś zrozumieć. A dalej nie rozumiem dlaczego dostajesz dodatkowe metody - pewnie dopisujesz je gdzieś wcześniej, albo to pochodna jakiegoś FW. -------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 366 Pomógł: 261 Dołączył: 23.09.2008 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Nie są nadpisywane, zauważ że zwraca Tobie poprawnie, tylko leci dalej po funkcjach dlatego masz remove=function().... itp.
To może gdzieś indziej "coś" dopisuje Tobie funkcje do obiektu Array? ale jak już mówiłem prosty warunek na wartość że nie jest obiektem powinien załatwić sprawę, chociaż problem będzie gdy parametr będzie obiektem, hehe. Btw. Jeżeli używasz jQuery, to czemu nie zrobisz: Kod // dałem tu obiekt, ale z tablicą też powinien sobie poradzić;)
var params = { a: 'b', 'b': 1 }; $.each(params, function(key,val) { alert(val); } ); Ten post edytował melkorm 28.01.2011, 14:21:50 -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 62 Pomógł: 3 Dołączył: 30.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
To jest normalne zachowanie - tablica w JS nie przechowuje pary klucz=>wartość, tylko same wartości (z liczbą porządkową jako kluczem), gdy ty próbujesz coś takiego
to masz tablicę. Gdy robisz tak:
To już nie przyporządkowujesz wartości w tablicy, tylko właściwości obiektu typu Array. A to już zupełnie inna rzecz. Pętla for () in () działa tutaj dlatego że przechodzi przez wszystkie metody i właściwości w obiekcie (bez znaczenia na klasę). Sprawdź sobie wartość length tej tablicy - powinieneś zrozumieć. A dalej nie rozumiem dlaczego dostajesz dodatkowe metody - pewnie dopisujesz je gdzieś wcześniej, albo to pochodna jakiegoś FW. OK, dzięki za wyjaśnienie właśnie, teraz wszystko rozumiem. ![]() melkorm: masz rację, to jest stary kod, ja go próbuję 'rewitalizować' i na pewno zrobię tak jak doradziłeś, poprostu zatrzymałem się na tej nieszczęsnej tablicy ![]() Tam Wam kliknąłem że pomogliście, dzięki! ![]() Ten post edytował iwosz 28.01.2011, 14:30:45 -------------------- Pozdrawiam,
iwosz. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 3.05.2025 - 04:49 |