Przesyłanie tablicy z PHP do JS

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 <

0

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

0

Wypełniam tak

$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

0

I gdzie Ty niby tam masz < ?

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

0

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

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 :)

0

<?php zamiast <? ?

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.

0

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

0

masz tam funkcje przyroda

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

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

function przyroda(phpArr){
                

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

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.

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ć ?

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ą

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

user image

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.

0

Wielkie dzięki za pomoc ! :*

0

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

echo '<script>  ...... '.json_decode($zmienna).'.....</script>';
1

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

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1