Grzegorz P.

Grzegorz P. Analityk IT

Temat: przekazywanie tablicy do funkcji javascript

Witam
mam problem z przekazaniem tablicy z php do funkcji javascript
gdzie w php zmienna $data_spotkaniaU jest tablicą i daje wynik w postaci dat:

20110624
20110620
20110720
20110820
20110819
20110603
20110703

natomiast wstawiając tę zmienną do funkcji javascript otrzymuję ostatnia wartość:

20110703
20110703
20110703
20110703
...

bardzo proszę o pomoc

<script type="text/javascript">//<![CDATA[

var data_spotkania = <?php echo $data_spotkaniaU?>;

var DATE_INFO = {
<?php echo $data_spotkaniaU?>: { klass: "highlight", tooltip: "That was yesterday" },
//20110608: { klass: "highlight", tooltip: "And this is TODAY" }
};

//document.write(data_spotkania+ "<br />");
function getDateInfo(date, wantsClassName) {

var as_number = Calendar.dateToInt(date);

//document.write(data_spotkania+ "<br />");
return DATE_INFO[as_number];

};

//]]></script>
Jakub L.

Jakub L. Programista

Temat: przekazywanie tablicy do funkcji javascript

Mam wrażenie że powinieneś popatrzyć na to, co dostaje przeglądarka po wykonaniu twojego PHPa, a później sprawdzić jak się deklaruje tablice w JS i czy owe dwie konstrukcje są tożsame.
Marek Stępień

Marek Stępień JavaScript
developer, front-end
engineer.

Temat: przekazywanie tablicy do funkcji javascript

Ten kod jest tak strasznie napisany, że, choć wprawdzie Jakub L. ma rację w ogólnym przypadku (zobacz, co PHP wypluwa i co powinien dostać JS), to w tym szczególnym przypadku sensowna rada brzmi: jeśli ktoś tego kodu ma na poważnie używać, to lepiej zatrudnij do tego profesjonalistę.
Jakub L.

Jakub L. Programista

Temat: przekazywanie tablicy do funkcji javascript

Napiszę więcej - nie wiem czy po poprawnym wypisaniu tej tablicy to się w ogóle skompiluje - inicjalizacja data_spotkania przejdzie w końcu poprawnie, ale zaraz potem jest DATE_INFO, gdzie <?php echo $data_spotkaniaU?> jest w miejscu identyfikatora a nie wartości.
Nawet nie próbuję tego zrozumieć :|.
Grzegorz P.

Grzegorz P. Analityk IT

Temat: przekazywanie tablicy do funkcji javascript

dziękuję za odpowiedzi,
kod jest jaki jest są to moje próby rozwiązania, funkcja jest częścią skryptu kalendarza na którym potrzebuję wyświetlić daty w którym są zaplanowane spotkania (w danym miesiącu- podświetlone dni spotkań). Funkcja ma już argumenty np data są to funkcje
dni całego miesiąca. php znalazło się dla tego że info o datach spotkań pobierane jest z bazy danych.
Aby lepiej zrozumieć odsyłam was na stronę w temacie
Highlight special dates, date tooltips
kalendarzGrzegorz Parczewski edytował(a) ten post dnia 05.06.11 o godzinie 21:28
Mirosław Ratman

Mirosław Ratman Manager IT,
Architekt systemów
@Avast, Founder
@aSyncro ...

Temat: przekazywanie tablicy do funkcji javascript

Grzegorz Parczewski:

var DATE_INFO = {
<?php echo $data_spotkaniaU?>: { klass: "highlight", tooltip: "That was yesterday" },
//20110608: { klass: "highlight", tooltip: "And this is TODAY" }
};

z tego kodu to nie bardzo wiadomo o co chodzi, ale:

1. <?php echo $data_spotkaniaU?> powinno być "<?php echo $data_spotkaniaU?>"
2. przydała by się jakaś petla chyba ?
Grzegorz P.

Grzegorz P. Analityk IT

Temat: przekazywanie tablicy do funkcji javascript

cały javascript objąłem pętlą php i wszędzie poza funkcją wyświetlają mi się ładnie daty a w samej funkcji data jest jedna i się powtarza tyle razy ile jest dni w kalendarzu - przez ten argument date
function getDateInfo(date, wantsClassName) { ...}

jak wejść w tą funkcję aby daty wewnątrz jej miały wartość tak jak w moim pierwszym poście? Funkcja jest częścią skryptu kalendarza z linku wyżej podanego

Temat: przekazywanie tablicy do funkcji javascript

Można ze zmiennej php $data_spotkaniaU zrobić zmienną javascriptu data_spotkania (php -> json -> js) a następnie


var data_spotkania = [20110624, 20110620, 20110720, 20110820, 20110819, 20110603, 20110703];

for(var i in data_spotkania){
DATE_INFO[data_spotkania[i]] = { klass: "highlight", tooltip: "That was yesterday" };
}
Mateusz Sabat

Mateusz Sabat programista student

Temat: przekazywanie tablicy do funkcji javascript

Albo spróbuj:

<script(...)>
var tablica = <?php json_encode($dane_php) ?>; ?>
</script>

Możesz też dać eval na to albo w jQuery parseJSON, ale w tym przypadku też powinno zadziałać.

Później oczywiście sobie to w JS obrabiaj.
Grzegorz P.

Grzegorz P. Analityk IT

Temat: przekazywanie tablicy do funkcji javascript

dziękuje za wsparcie, rozwiązałem to w ten sposób - może się komuś przyda jak się spotka z podobnym problemem :-)

oto cały skrypt dotyczący pokazywania dat spotkań na kalendarzu

<?php
//wydobycie z bazy daty spotkań oraz firm z którymi mamy się spotkac (id_uzytk jest to zlogowany użytkownik)
$querySpotJ="
SELECT data_spotkania,nazwa_k FROM p_wynikKontak where id_uzytkownik_s = $id_uzytk
";
$resultSpotJ=mysql_query($querySpotJ) or die('zła Spot');

// ustalenie ilości wyszukanych obiektów
$liczSpotJ=mysql_num_rows($resultSpotJ);
for($x=0;$x<$liczSpotJ;$x++)
{
// przekształcenie danych na tablicę
$wiersz=mysql_fetch_assoc($resultSpotJ);

$data_spotkania = $wiersz['data_spotkania'];
//nazwa firmy
$nazwa_k = $wiersz['nazwa_k'];

// przekształcam format daty z 2011-06-11 na 20110611 - wymagane w kalendarzu
$do_usuniecia = '-';
$data_spotkaniaU = str_replace($do_usuniecia, "", $data_spotkania);
// wprowadzam do tablicy
$dataTab[]= $data_spotkaniaU.': { klass: "highlight2", tooltip: "<div style=\'text-align: center; color: #2E5770\'>%Y-%m-%d (%A)" +
"<br />'.$nazwa_k.'</div>" },';
}
?>
<script type="text/javascript">//<![CDATA[
//zaznaczenie na kalendarzu kontaktu
var DATE_INFO = {
<?php for($j=0;$j<$liczSpotJ;$j++)
{
echo $dataTab[$j];
} ?>

};

function getDateInfo(date, wantsClassName) {
var as_number = Calendar.dateToInt(date);
return DATE_INFO[as_number];

};

Calendar.setup({
dateInfo : getDateInfo // getDateInfo function

});
//]]></script>



Wyślij zaproszenie do