Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jaki jest błąd w tym zapisie?
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
twojastara
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"
mar1aczi
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
Pyton_000
nie [] a {} bo wrzucasz do tablicy klucze alfanumeryczne a nie indeksowane licznowo.
twojastara
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. });
nospor
Moglbys sie juz wreszcze poduczyc podstaw tablic i obiektow skoro sie za nie bierzesz...
NIe: data = { key: value};
a:
data = {};
data[key] = value;
twojastara
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.
nospor
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
mar1aczi
Zerknij, jak w js używać tablic http://www.w3schools.com/js/js_arrays.asp
twojastara
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.
nospor
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...
twojastara
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
nospor
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
mar1aczi
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.
twojastara
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ć.

nospor
@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.
mar1aczi
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.
PrinceOfPersia
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/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.