Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Przekazywanie tablicy do JS
Forum PHP.pl > Forum > Przedszkole
Warmix
Mam daną tablicę pod zmienną $arr.
  1. $arr = array("test"=>"123", "test2"=>"567");


Chcę teraz przekazać tą tablicę do funkcji javascript. Robię to tak:

  1. $exe = addslashes(json_encode($arr));


Efekt po echo $exe:
Cytat
{\"test\":\"123\",\"test2\":\"567\"}


Teraz wpuszczam to w funkcję tak:

  1. ....
  2. ....
  3. echo '<td onclick="editExe(this, '.$sEE->getId().', \'editExeName\', \''.$exe .'\');">'.$sEE->getIdExeName().'</td>';
  4. ....
  5. ....


Niestety, funkcja JS w ogóle nie uruchamia się. W konsoli wyrzuca błąd:
Cytat
Uncaught SyntaxError: Invalid or unexpected token


Oczywiście funkcja uruchamia się bez problemu, jeżeli nie wrzucam tam tablicy, np.:
  1. ....
  2. ....
  3. echo '<td onclick="editExe(this, '.$sEE->getId().', \'editExeName\', \'test\');">'.$sEE->getIdExeName().'</td>';
  4. ....
  5. ....


W jaki sposób mogę to naprawić?
olszam
sprawdź z wrzuconą tablicą na sztywno w miejsce $exe albo wyrzucić addslashes
sabat24
Zrób to tak:

  1. echo '<td onclick="editExe(\''.json_encode($arr).'\')"></td>';
Warmix
Cytat(olszam @ 18.09.2017, 12:17:00 ) *
sprawdź z wrzuconą tablicą na sztywno w miejsce $exe albo wyrzucić addslashes


Próbowałem obu opcji. Wrzucenie na sztywno tablicy $exe wyrzuca błąd:
Cytat
Notice: Array to string conversion in...


Z samym json_encode bez addslahes wyrzuca ten sam błąd:
Cytat
Uncaught SyntaxError: Invalid or unexpected token


Ze względu na sposób umieszczenia tej zmiennej w otagowanym onclick za pomocą cudzysłowów wydaje się, że jednak addslashes powinno być, kod źródłowy strony wskazuje wtedy:
  1. <td onclick="editExe(this, 1, 'editExeName', '{\"test\":\"123\",\"test2\":\"567\"}');">test</td>






Cytat(sabat24 @ 18.09.2017, 12:27:23 ) *
Zrób to tak:

  1. echo '<td onclick="editExe(\''.json_encode($arr).'\')"></td>';


Tak też próbowałem na początku, wrzucić bezpośrednio, jednak przez ciągły ten sam błąd wyrzuciłem na zewnątrz - teraz jeszcze raz sprawdziłem, tak jak napisaleś - ten sam błąd:
Cytat
Uncaught SyntaxError: Invalid or unexpected token
sabat24
Zapomniałem o jednym:

  1. echo '<td onclick="editExe(\''.htmlentities(json_encode($arr)).'\')"></td>';


Chyba, że chcesz mieć dane jako JSON bezpośrednio, to wtedy możesz wstawić obiekt JSON bez apostrofów.
Warmix
Okej, działa poprawnie, nie sądziłem, że mogę to przepuścić przez htmlentities czy htmlspecialchars i będzie w taki sposób działać. Dzięki smile.gif
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.