Przesyłanie tablicy z PHP do JS

Przesyłanie tablicy z PHP do JS
KR
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • 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 <

edytowany 1x, ostatnio: Krakak
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Rzeszów
0

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


KR
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • 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

edytowany 1x, ostatnio: Krakak
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Rzeszów
0

I gdzie Ty niby tam masz < ?

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


KR
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • 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

edytowany 1x, ostatnio: Krakak
KR
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • 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
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około miesiąc
  • Lokalizacja:Rzeszów
0

<?php zamiast <? ?


szalonyfacet
  • Rejestracja:ponad 12 lat
  • Ostatnio:11 miesięcy
  • 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:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:26
0

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

szalonyfacet
  • Rejestracja:ponad 12 lat
  • Ostatnio:11 miesięcy
  • 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:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • 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:ponad 12 lat
  • Ostatnio:11 miesięcy
  • 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:ponad 10 lat
  • Ostatnio:prawie 9 lat
  • Postów:26
0

Wielkie dzięki za pomoc ! :*

KA
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 10 lat
  • 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>';
edytowany 1x, ostatnio: kajtek
dzek69
Moderator
  • Rejestracja:ponad 18 lat
  • Ostatnio:około miesiąc
  • 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.