Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jaki jest błąd w tym zapisie?
twojastara
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 25.11.2014

Ostrzeżenie: (10%)
X----


Co jest nie tak z drugim fragmentem kodu, że po var_dump($data) fragment pierwszy drukuje tak jak trzeba zawartość zmiennej a drugi NULL?

Pierwszy. Dobry
  1. function myFunction() {
  2. var elementy = document.getElementsByClassName('inputISBN');
  3. var data = elementy[0].value;
  4.  
  5. $.ajax({
  6. url: "{{ path('test') }}",
  7. type: "POST",
  8. data: { "data": data }
  9.  
  10. });
  11.  
  12. }



Drugi. Zły.
  1. function myFunction() {
  2. var elementy = document.getElementsByClassName('inputISBN');
  3. var data = [];
  4. data[elementy[0].name] = elementy[0].value;
  5.  
  6. $.ajax({
  7. url: "{{ path('test') }}",
  8. type: "POST",
  9. data: { "data": data }
  10. });
  11. }


Mimo, że w konsoli przeglądarki po kolei wklepywany kod drugi zwraca to co trzeba
  1. var elementy = document.getElementsByClassName('inputISBN');
  2. undefined
  3. var data = [];
  4. undefined
  5. data[elementy[0].name] = elementy[0].value;
  6. "667"


Ten post edytował twojastara 28.04.2015, 23:53:17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
PrinceOfPersia
post
Post #2





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


ku uściśleniu
[] ---> to jest tablica
{} ---> to jest obiekt.

Każda tablica jest również obiektem, bo JS jest językiem obiektowym i większość rzeczy to obiekty.
Natomiast nie każdy obiekt jest tablicą. Jak przypiszesz do zmiennej coś takiego {}, czy {cosTam: 334} itp. to nie będzie to wcale żadna tablica, a obiekt. W JavaScripcie. Bo w PHP istniałoby coś takiego jak tablica asocjacyjna, w JS nie ma tablic asocjacyjnych, za to są obiekty.

Więc zapis
[JAVASCRIPT] pobierz, plaintext
  1. var data = [];
  2. data[elementy[0].name] = elementy[0].value;
[JAVASCRIPT] pobierz, plaintext

powinien działać, tyle, że będzie działał pewnie niekoniecznie tak jakby chciał programista (jeśli się nie rozumie jak to działa do końca) Tzn. jeśli klucz (wartośc zmiennej elementy[0].name) jest liczbą to będzie to zapis tablicowy (bo zmienna data jest tablicą, bo została tak zadeklarowana: [] ), ale jeśli klucz jest stringiem, to tak naprawdę olewamy już tablicowość zmiennej data i odwołujemy się do zmiennej data jako do obiektu, dodając/zmieniając jego właściwości (innymi słowy data['nazwa'] to jest to samo co data.nazwa). Nie jest to jednak to samo, jak dodajemy właściwości do obiektu data, to nie działa właściwość length (bo niby czemu ma działać: http://jsfiddle.net/4Lfnwc8e/

Ten post edytował PrinceOfPersia 29.04.2015, 21:22:08
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 16.10.2025 - 22:05