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 (1 - 16)
mar1aczi
post
Post #2





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


W pierwszym kodzie data to normalna zmienna, w drugim jest to tablica.
Wędka: http://stackoverflow.com/questions/9001526...x-to-php-script wink.gif


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nie [] a {} bo wrzucasz do tablicy klucze alfanumeryczne a nie indeksowane licznowo.
Go to the top of the page
+Quote Post
twojastara
post
Post #4





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

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


Cytat(Pyton_000 @ 29.04.2015, 08:41:47 ) *
nie [] a {}

zamiast
  1.  
  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. });

to nie poszło
  1. var elementy = document.getElementsByClassName('inputISBN');
  2. var data = {};
  3. data = {elementy[0].name : elementy[0].value};
  4.  
  5. $.ajax({
  6. url: "{{ path('test') }}",
  7. type: "POST",
  8. data: data ,

to nie poszło . zwróciło null
  1. var elementy = document.getElementsByClassName('inputISBN');
  2. var data = {};
  3. var key = elementy[0].name;
  4. var value = elementy[0].value;
  5. data = { key: value};
  6.  
  7. $.ajax({
  8. url: "{{ path('test') }}",
  9. type: "POST",
  10. data: data ,
  11. });

to nie poszło
  1. var elementy = document.getElementsByClassName('inputISBN');
  2. var data = {};
  3. var key = elementy[0].name;
  4. var value = elementy[0].value;
  5. data = { key: value};
  6.  
  7.  
  8. $.ajax({
  9. url: "{{ path('test') }}",
  10. type: "POST",
  11. data: { "data": data }
  12. });
  13.  

var_dump() zwraca string '[]' (length=2)
  1. var elementy = document.getElementsByClassName('inputISBN');
  2. var data = [];
  3. data[elementy[0].name] = elementy[0].value;
  4. var jsonString = JSON.stringify(data);
  5. $.ajax({
  6. url: "{{ path('test') }}",
  7. type: "POST",
  8. data: { "data": jsonString }
  9. });

var_dump() zwraca string '[]' (length=2)
  1. var elementy = document.getElementsByClassName('inputISBN');
  2. var data = [];
  3. data[elementy[0].name] = elementy[0].value;
  4. var jsonString = JSON.stringify(data);
  5. $.ajax({
  6. url: "{{ path('test') }}",
  7. type: "POST",
  8. data: { data: jsonString }
  9. });

tu coś wreszcie się pokazało (bez klucza, ale z wartością). var_dump zwraca array (size=1) 'key' => string '667' (length=3)
  1. var elementy = document.getElementsByClassName('inputISBN');
  2. var data = {};
  3. var key = elementy[0].name;
  4. var value = elementy[0].value;
  5. data = { key: value};
  6.  
  7. $.ajax({
  8. url: "{{ path('test') }}",
  9. type: "POST",
  10. data: {data:data} ,
  11. });


Ten post edytował twojastara 29.04.2015, 11:25:29
Go to the top of the page
+Quote Post
nospor
post
Post #5





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




Moglbys sie juz wreszcze poduczyc podstaw tablic i obiektow skoro sie za nie bierzesz...
NIe: data = { key: value};
a:
data = {};
data[key] = value;


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

"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
twojastara
post
Post #6





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

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


Cytat(nospor @ 29.04.2015, 13:30:18 ) *
Zdaje sie pytasz o to w innym temacie...



Cytat(nospor @ 29.04.2015, 13:31:14 ) *
Moglbys sie juz wreszcze poduczyc podstaw tablic i obiektow skoro sie za nie bierzesz...
NIe: data = { key: value};
a:
data = {};
data[key] = value;

Gdybyś przed zamknięciem drugiego temtu przeczytał go, to wiedziałbyś, że ajaxem chcę wysłać tablicę utworzoną w pętli z wieloma parami klucz=>wartość.
Ten temat zawiera uproszczona wersję programu bez pętli. Co mi da wysłanie sugerowanej przez ciebie tablicy
data[key] = value; skoro może ona pomieścić jeden element?

W zamkniętym przez ciebie temacie napisałem, że poniższy kod (właśnie analogiczny to twojego data = {};
data[key] = value;
  1. function myFunction() {
  2. var data = [];
  3. var elementy = document.getElementsByClassName('input');
  4.  
  5. for (var i = 0; i < elementy.length; i++){
  6. data[elementy[i].name] = elementy[i].value;
  7. }
  8.  
  9. $.ajax({
  10. url: "{{ path('test') }}",
  11. type: "POST",
  12. data: {data:data}
  13. });
  14. }

zwraca syntax error Uncaught SyntaxError: Unexpected token [

Masz rację, zrobiłem błąd, chciałem bez nauki jeżyka JavaScript użyć go w jednym małym fragmencie aplikacji opartym o Symfony. W tym momencie wiem, że straciłem na tej tej pierdółce tyle czasu, że szybciej przeczytałbym 2 ksiązki. Ale teraz jestem na takim etapie, że albo zrobie to dziś albo to odpuszczę, bo muszę pójść dalej.
Go to the top of the page
+Quote Post
nospor
post
Post #7





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




To, ze w petli probujesz zrobic to co ja ci bodalem bez petli, to naprawde nie powod, by zakladac kolejny temat. Oba tematy zawierają to samo: nie potrafisz do obiektu wpisac indeksu będącego nazwą w zmiennej. Wiec o to, co ci juz podalem:
data[key] = value;
nie ma znaczenia czy uzyjesz w petli czy bez petli. Tylko ma znaczenie by to tak zrobic, a ty tak nie robiles. I powtarzam jeszcze raz, bo widze lubisz czytac na szybko i przeaczac fakty, ze na poczatku ma byc deklaracja:
data = {};
a nie
data = [];




Cytat
W zamkniętym przez ciebie temacie napisałem, że poniższy kod (właśnie analogiczny to twojego data = {};
Oj nie nie... to nie bylo analogiczne. Kod jest krotki, postaraj sie samemu wylapac roznice bo są widoczne gołym okiem


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

"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
mar1aczi
post
Post #8





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


Zerknij, jak w js używać tablic http://www.w3schools.com/js/js_arrays.asp


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
twojastara
post
Post #9





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

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


Cytat(nospor @ 29.04.2015, 14:50:49 ) *
data = {};
a nie
data = [];

ja pierdole. Racja. Działa. (Ja, jak ja, no ale jest coś dziwnego w tym, że przynajmniej kilkunastu doświadczonych programistów na stackoverflow z kaliforni czy bombaju nie zwróciło mi na to uwagi). Dzięki.
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




Pal licho californication... szkoda tylko, ze uznales, ze skoro tamte madrale ci nie zwracają uwagi, to mozna ignorowac co piszą podnóżki z polskiego forum sad.gif No ale skoro tak, to po co w ogole piszesz u nas, skoro tam masz takie fachury...


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

"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
twojastara
post
Post #11





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

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


Cytat(mar1aczi @ 29.04.2015, 14:53:27 ) *
Zerknij, jak w js używać tablic http://www.w3schools.com/js/js_arrays.asp

oczywiście gapiłem się w tę stronę. Nie znajdziesz tam przykładu, w którym tablicę deklarowałoby się tak data = {}; by chwilę potem definiować ja tak: data['key'] = value;


Cytat(nospor @ 29.04.2015, 14:59:37 ) *
Pal licho californication... szkoda tylko, ze uznales, ze skoro tamte madrale ci nie zwracają uwagi, to mozna ignorowac co piszą podnóżki z polskiego forum sad.gif No ale skoro tak, to po co w ogole piszesz u nas, skoro tam masz takie fachury...

żaden polski podnóżek wcześniej nie zwrócił mi na to uwagi, a tematów, poza tym, który zamknąłeś, było więcej z takim błędnym zapisem. pozdrawiam

Ten post edytował twojastara 29.04.2015, 14:12:34
Go to the top of the page
+Quote Post
nospor
post
Post #12





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




Ja ci zwrocilem na to uwage w moim pierwszym poscie. Ale olałeś to całkowicie, wkoncu jestem tylko polskim podnóżkiem a nie fachurą z Kaliforni... Bardziej wolałeś skupić się na tym jak to ja niedobry zamknąłem ci temat niż na tym, co ci podałem jako odpowiedź... A odpowiedź była banalna i krótka, od dwie linijki kodu, ktore w 100% rozwiązywały Twój problem

Tak wiec na przyszłość: naprawde nie ma znaczenia, czy piszesz na stackoverflow czy na polskim forum. I tam i tu są fachury, i tam i tu niefachury i tam i tu są buraki. Przykładaj więc więcej uwagi co ludzie piszą a nie na to gdzie piszą smile.gif


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

"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
mar1aczi
post
Post #13





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


Cytat(twojastara @ 29.04.2015, 15:11:37 ) *
Nie znajdziesz tam przykładu, w którym tablicę deklarowałoby się tak data = {}; by chwilę potem definiować ja tak: data['key'] = value;

Hmm, a w "Arrays are Objects" kod
Kod
var person = {firstName:"John", lastName:"Doe", age:46};

Krócej niż Ty rozpisałeś, ot - tak od razu tablica z wartościami.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
twojastara
post
Post #14





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

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


Cytat(nospor @ 29.04.2015, 15:16:26 ) *

no ale przyznasz, że taki profil robi wrażenie
"A Dutch guy living and working in Cusco, Peru since 1998. At the moment in Fuengirola, Spain.

Here my activities range from web-site design and development to travelling through Argentina, Chile, Bolivia and Peru as a tour guide.

56,218 REPUTATION"

Kto jak nie Holender mieszkający w Peru powienien takie rzeczy wiedzieć.

Go to the top of the page
+Quote Post
nospor
post
Post #15





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




@mar1aczi ale tak jak ty podajesz nie jestes w stanie stworzyc indeksu ze zmiennej. A tutaj caly czas mowa o indeksie ze zmiennej...

Cytat
no ale przyznasz, że taki profil robi wrażenie
wow... normalnie spadlem z krzesla...

Cytat
Kto jak nie Holender mieszkający w Peru powienien takie rzeczy wiedzieć.
Np. ja, moderator, ktory zamknal Twoj temat całkowicie słusznie.
Powtarzam: czytaj co ci ludzie piszą, niezależnie czy to stackoverflow czy nie.


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

"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
mar1aczi
post
Post #16





Grupa: Zarejestrowani
Postów: 731
Pomógł: 141
Dołączył: 9.05.2011
Skąd: śląskie

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


Cytat(nospor @ 29.04.2015, 18:43:23 ) *
@mar1aczi ale tak jak ty podajesz nie jestes w stanie stworzyc indeksu ze zmiennej.

Tak, prawda. Chodziło mi o sam sposób deklaracji tablicy przy użyciu {} i jak jest indeksowana (jak jej używać). Na stronie, którą podałem jest nawet przykład jak się odwoływać do elementów takiej tablicy.


--------------------
Szanuj innych czas! Kliknij , gdy pomocną wskazówkę otrzymasz.
Go to the top of the page
+Quote Post
PrinceOfPersia
post
Post #17





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

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 Aktualny czas: 20.08.2025 - 23:48