Przesyłanie tablicy z PHP do JS

Przesyłanie tablicy z PHP do JS
KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Witam wszystkich,
mam taki problem, gdyż potrzebuję przesłać dane z tablicy wypełnionej wartościami z MySQL do JS.
Od strony php wszystko działa poprawnie.

Znalazłam taką metodę, która wydała mi się w miarę logiczna,
var ar = <?php echo json_encode($aArray) ?>;
Jednak występuje problem gdyż JS się buntuje, i bardzo mu się nie podobają "<"
Uncaught SyntaxError: Unexpected token <

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

pokaż jaka jest przykładowa zawartość $aArray?

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Wypełniam tak

Kopiuj
$aArray = array();
$sSQL = sprintf("SELECT * FROM questions");
$rResult = mysql_query($sSQL);
while ($aRow = mysql_fetch_array($rResult))
{
    $aArray[] = $aRow;
}

Tablica wielowymiarowa:
Array ( [0] => Array ( [0] => 1 [ID] => 1 [1] => Przyroda [category] => Przyroda [2] => tresc pytania 1 [question] => tresc pytania 1 [3] => 1 [answer] => 1 ) [1] => Array ( [0] => 2 [ID] => 2 [1] => Przyroda [category] => Przyroda [2] => tresc pytania 2 [question] => tresc pytania 2 [3] => 0 [answer] => 0 ) [2] => Array ( [0] => 3 [ID] => 3 [1] => Przyroda [category] => Przyroda [2] => tresc pytania 3 [question] => tresc pytania 3 [3] => 1 [answer] => 1 ) )

user image

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

I gdzie Ty niby tam masz < ?

Zajrzyj w źródło strony i zobacz co Ci się produkuje.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

user image
chodzi o "<" z tego <?php echo json_encode($aArray) ?>; w tej linijce jest błąd jakkolwiek inaczej bym to zapisała

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Hm... Pod HTMLem dałam <script.... z całą jego zawartością i działa, jednak jak dam tam plik źródłowy to znajduje zawsze ten sam błąd :/
@dzek69 dzięki za pomoc :)

dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

<?php zamiast <? ?

szalonyfacet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Dąbrowa Górnicza
0

domyslam sie ze caly ten kod siedzi w osobnym pliku o rozszrzeniu .js, co powoduje ze parser nie przetwarza kawalka z php na wartosc, bo on tylko przetwarza w plikach z koncowka .php rozwaizaniem jest dodac parametr do funkcji przyroda i wywolywac ja z dokumentu php, a cialo funkcji zostawic w .js. jak tego bedzie wiecej to mozna stworzyc funkcje initialise, ktora przyjmie paraketry i porozdziela po funkcjach lub zmiennych globalnych.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Może pytanie głupie - ale który parametr?

szalonyfacet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Dąbrowa Górnicza
0

masz tam funkcje przyroda

Kopiuj
function przyroda()
                {
                    kategoria = 0;
                    ar = ...
                }

i teraz do funkcji dodaj parametr (nazwa dowolna, u mnie to phpArr)

Kopiuj
function przyroda(phpArr){
                

i przypisz parametr do swojej zmiennej (lub uzywaj bezposrednio nazwy parametru)

Kopiuj
function przyroda(phpArr) 
                {
                    kategoria = 0;
                    ar = phpArr // lub uzywaj wszedzie phpArr zamiast ar, lub parametr nazwij ar i nie dodawaj nic.
                }

i wtedy wywolujesz funkcje ''przyroda(<?php echo json_encode($aArray);?>. i teraz wywolanie funkcji MUSI nastapic w bloku <script> (moze byc przy zaladowaniu dokumentu) w pliku z rozszrzeniem .php, wtedy parser przetworzy tablice na js.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Wrzuciłam wszystko do pliku z htmlem zapisanym jako index.php

Nie jestem pewna czy dobrze zrozumiałam:
var ar = <?php echo json_encode($aArray, JSON_PRETTY_PRINT); ?>;
tak mam to zapisać ?

Kopiuj
function nature() {
			categoryName = "Przyroda";
			fillTable(arPHP);
		}

function fillTable(arPHP) {

			ArrayWithQuestionsAll = arPHP;
			alert(arrayWithQuestionsAll[2]);
			for (var i = 0; i < arrayWithQuestionsAll.length; i++) {
				if (arrayWithQuestionsAll[i][placeOfCategory] == categoryName){
					// arrayWithQuestions[countQuestions] = new Array();
						for (var j = 0; j <5; j++) {
							arrayWithQuestions[countQuestions][j] = arrayWithQuestionsAll[i][j];					
						}
					countQuestions++;
					
				}
			}
			
			removeButtons();
		}

Tym razem przestał krzyczeć błędami o php a zaczął, że nature() nie jest funkcją

Kopiuj
<p>
		<center>
			<span class="button__nature" id="nature" onclick="nature()">
				Przyroda
			</span>
		</center>
	    </p>

user image

szalonyfacet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Dąbrowa Górnicza
1

wskazowki na przyszlosc: Samokomentuajce sie nazwy funkcji. nature nic nie mowi nikomu, nawet Tobie za dwa tyg. nic to nie powie i bedziesz kopac w kodzie, zeby rozkminic o co ci chodzilo wczesniej. Rzuca sie, bo najprawdopodobniej gdzies w kodzie istnieje obiekt nature, ktorego anzwa jest tozsama z nazwa funkcji. zmien nazwe funkcji i to pomoze.

co do kodu, to tworzysz zmienna globalna (tak mysle, bo nie ma calosci kodu) ar, ale do fillTable przesylasz juz arPHP, wiec tez, albo to inna zmienna, albo nazwy sie nie zgadzaja.

kolejna podstawowa rzecz to Javascript jest case-sensitive, czyli wielkosc znakow ma znaczenie. dla JS dupa i DuPa i Dupa to trzy rozne d**y, mimo iz po pijaku bym nie pzonal, ale JS rozpoznaje. wiec [przypisanie czegos do ArrayWithQuestionsAll, a uzywanie arrayWithQuestionsAll, jest bledem. (zreszta jakies magiczne ide ci podpowiada bledy js w html, a nie podpowiada w JS, nie kumam.

i troche zaawansowanej rady. uzywaj enkapsulacji (poczytaj, podowiaduj sie na przyszlosc, inaczej hermetyzacja). w funkcji fillTable, korzystasz przynajmniej z 3 zmiennych z zewnatrz, czyli nie jestes w stanie przetestowac dzialania funkcji, bo zmienne sa zalezne od tego co jest w innych czesciach kodu i co moze zostac zmienione przez kogos innego. porob funkcje, ktore przyjmuja parametry i na nich dzialaj. cos jak, jak siedzisz w kuchni i gotujesz dla gosci, to nie korzystaj z ich lodowek, tylko kaz im przyniesc jedzenie do twojej kuchni i z tych skladnikow rob obiad (analogia do kuchni niezamierzona, wszak teraz zorientowalem sie ze jestes kobieta :P).

i powoli spokojnie krok po kroczku naprawiaj bledy. no i dobre IDE, ktore literowki i bledy skladniowe wylapie od razu, bys mogla skupic sie na samej logice aplikacji.

KR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Wielkie dzięki za pomoc ! :*

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2
0

Innym rozwiązaniem jest też wstawienie <script> w echo a potem w odpowiednim miejscu dodać zmienną

Kopiuj
echo '<script>  ...... '.json_decode($zmienna).'.....</script>';
dzek69
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
1

@kajtek: chyba encode :p i raczej coś w stylu

Kopiuj
echo "<script>var dane = ".json_encode($zmienna).";</script>";

decode na tablicy spowoduje wynik <script>Array</script> ;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.