Newsgroup: it.comp.lang.javascript
Titolo: come passare parametri da php a js

Dato che a parole temo di non spiegarlo coi termini corretti, farï¿œ 
direttamente un esempio.
Del codice php legge il valore della variabile $opzione, che poi deve 
inizializzare una funzione js da eseguire sul client (mettiamo un 
semplice avviso).
 
Come fare? Ho pensato alle seguenti alternative in php:
 
1) echo "<script>alert('" . $opzione . "');</script>";
ma qualcosa mi dice che ï¿œ non ï¿œ il massimo
 
2) echo "<script prop_opzione='" . $opzione . "'>// leggo il contenuto 
di prop_opzione e lo passo ad alert...</script>";
ma questo invaliderebbe il documento html
 
quindi... come fare?

oss ha scritto:

Qui fa esattamente come in 1), quindi forse non ï¿œ cosï¿œ brutto come pensavo
http://p2p.wrox.com/php-faqs/11606-q-how-do-i-pass-php-variables-javascript.html
 
 

 quindi... come fare?
 
Un altra soluzione ï¿œ usare i cookie, che originariamente erano pensati
proprio per scambiare dati tra client e server: puoi impostare un cookie
in memoria nella risposta del server, che il client poi si legge tramite
`document.cookie`.
Oppure puoi usare tag HTML dove inserisci il contenuto, storicamente
questo era fato con `input` di tipo `hidden`:
 
    <input id="my-option" value="<?=$opzione?>" type="hidden" />
 
Volendo, potrebbero essere anche in nodi HTML nascosti tramite CSS.
Insomma, le possibilitï¿œ sono tante, e non le ho elencate nemmeno tutte,
dipende anche molto dal contesto in cui uno ï¿œ.

 essere usati attraverso diverse pagine.
 
Ho fatto cosï¿œ come hai suggerito per prima alternativa dato che mi 
sembra l'approccio piï¿œ "pulito", facendo in modo che lo script (che puï¿œ 
diventare anche esterno) peschi tutto ciï¿œ che gli occorre dallo script 
di configurazione.
Ora perï¿œ mi trovo ad affrontare un nuovo ostacolo.
Non avevo considerato che il mio script puï¿œ venire richiamato anche piï¿œ 
di una volta, ovviamente con parametri di configurazione diversi (con i 
quali interviene su elementi diversi del documento).
In teoria potrei fare cosï¿œ negli (plurale) script di configurazione 
(ovviamente facendoli scrivere da php):
<script>
var opzione=[];
var opzione[0]=[]; //ogni volta che mi serve andrï¿œ a creare un nuovo array
opzione[0]['tag_elemento']='div';
...
funzione_da_richiamare_piï¿œ_volte(opzione[0]);
<script>
in modo da non dover intervenire nello script che contiene la funzione 
da richiamare piï¿œ volte.
Perï¿œ questo script, cioï¿œ quello che contiene la funzione da richiamare 
piï¿œ volte, ï¿œ strutturato cosï¿œ:
<script>
$(function () {
...
});
<script>
cioï¿œ con una funzione jquery che viene eseguita automaticamente e mi 
pare non accetti parametri.
Riesco a trasformarla in una funzione jquery che accetta parametri e puï¿œ 
venire richiamata da una linea di codice in un altro script?
Grazie della pazienza.
 

 pare non accetti parametri.
 
Ho semplicemente riscritto
 
<script>
$(function () {
...
});
<script>
 
come
 
<script>
function funzione_da_richiamare_piï¿œ_volte (array_opzioni) {
...
}
<script>
 
e tutto sembra funzionare.
Non so se in termini di visibilitï¿œ delle variabili cambia qualcosa ma mi 
pare di no: le variabili che prima erano dichiarate internamente a 
$(function ()
ora sono dichiarate internamente a
function funzione_da_richiamare_piï¿œ_volte (array_opzioni)
Poi in effetti non ne sono sicurissimo dato che non conosco il 
significato della scrittura $(function ()
Comunque pare filare...
 

 significato della scrittura $(function ()
 
Ti conviene studiartelo, se vuoi usare jQuery. :)
 
Detto in parole povere significa "esegui questa function quando la pagina 
ha finito di caricarsi".
 
Bye.

Alessandro Pellizzari ha scritto:

Sì, hai ragione. Finora mi sono sempre rifiutato di studiarlo perché 
prima dovevo almeno acquisire un livello minimamente accettabile in js, 
che ancora non so se ho raggiunto o meno. :)
Non pensare però che mi dedichi a chissà quali progetti. Lavoro con 
funzioni già pronte, fatte da altri, riadattandole marginalmente. In 
questo specifico caso volevo solo "parametrizzare" il lavoro che sul mio 
blog personale facevo volta per volta, copiando come già detto funzioni 
già pronte, senza problemi.
In questo caso la dichiarazione della funzione mi ricordava vagamente 
le closure in js (ma ha senso parlare di closure in jquery?).
Per inciso c'è un'altra espressione ricorrente delle funzioni che vedo 
di jquery di cui non conosco il significato: $(document).ready(function()
che avrei detto corrispondere alla tua descrizione.
Se hai un tutorial all'acqua di rose da segnalarmi, sarà gradito. Come 
ho già detto, non penso mi occorra scendere molto in profondità nello 
studio.
 

 studio.
 
Onestamente no. Non mi ricordo cosa ho usato io all'epoca. :)
Ma di tutorial di jQuery ne trovi a pacchi.
 
Bye.

 E` uguale. Una è l'alias dell'altra.
 
E che significato devo attribuire allora a una funzione fatta così? Grazie.
 
$(function () {
     var xxx;
     $(document).ready(function() {
     ...
     });
});


Non mi pare abbia molto senso perché quando arrivi a var xxx; il dom è 
già caricato e ready
Semplicemente quello che c'è in ... viene eseguito
 
Un consiglio che ti posso dare è di essere *estremamente* ordinato 
quando scrivi JS, quindi di evitare tutti i costrutti inutili o superflui
 
 
-- 
I fatti mi cosano

      $(document).ready(function() {
 
"Code smell" penso sia la definizione più adatta. :)
 
Bye.

 ha finito di caricarsi".
 
Non esattamente. Dovrebbe essere l'equivalente di `DOMContentLoaded`,
quindi vuol dire "esegui questa funzione quando il DOM della pagina è
caricato, anche se la pagina non ha terminato il caricamento". il
`DOMContentLoaded` è un evento che viene messo appena il DOM è
disponibile, quindi molto prima di `onload`, che invece viene emesso
solo quando la pagina ha effettivamente finito di caricarsi.