Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

come passare parametri da php a js

845 views
Skip to first unread message

oss

unread,
Feb 21, 2013, 2:53:44 PM2/21/13
to
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

unread,
Feb 21, 2013, 3:03:36 PM2/21/13
to
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

ZER0

unread,
Feb 21, 2013, 3:14:27 PM2/21/13
to
On 2/21/13 8:53 PM, oss wrote:

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

I modi sono tanti. Puoi avere un file di configurazione siffatto:

var config = {
opzione1: "<?=$opzione1?>",
opzione2: "<?=$opzione2?>"
}

Tale file poi verrᅵ chiamato dalla pagina HTML in questo modo:

<script src="configuration.php"></script>
<script>
// Usa l'oggetto `config`

alert(config.opzione1);
</scrpt>

Piᅵ o meno il concetto ᅵ questo, per tenere separato il documento dai
valori di configurazione, e soprattutto non sporcare il codice JS che
potrᅵ comunque essere messo in un file esterno.
Generalmente questo va bene per valori di configurazione che possono
essere usati attraverso diverse pagine.

> Come fare? Ho pensato alle seguenti alternative in php:
>
> 1) echo "<script>alert('" . $opzione . "');</script>";
> ma qualcosa mi dice che ᅵ non ᅵ il massimo

Puoi fare anche cosᅵ, magari perᅵ associando tale valore a una variabile
JS in modo da non dover scrivere PHP ogni volta. ᅵ in pratica un
approccio similare a quello sopra, ma dove inietti i valori direttamente
nel documento.

> 2) echo "<script prop_opzione='" . $opzione . "'>// leggo il contenuto

A questo punto ᅵ preferibile usare i data-* attributes, che sono se non
altro validabili in HTML5:

<http://html5doctor.com/html5-custom-data-attributes/>

> 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 ᅵ.

oss

unread,
Feb 22, 2013, 6:53:33 AM2/22/13
to
ZER0 ha scritto:
>> Del codice php legge il valore della variabile $opzione, che poi deve
>> inizializzare una funzione js da eseguire sul client (mettiamo un
>> semplice avviso).
>
> I modi sono tanti. Puoi avere un file di configurazione siffatto:
>
> var config = {
> opzione1: "<?=$opzione1?>",
> opzione2: "<?=$opzione2?>"
> }
>
> Tale file poi verrᅵ chiamato dalla pagina HTML in questo modo:
>
> <script src="configuration.php"></script>
> <script>
> // Usa l'oggetto `config`
>
> alert(config.opzione1);
> </scrpt>
>
> Piᅵ o meno il concetto ᅵ questo, per tenere separato il documento dai
> valori di configurazione, e soprattutto non sporcare il codice JS che
> potrᅵ comunque essere messo in un file esterno.
> Generalmente questo va bene per valori di configurazione che possono
> 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.

oss

unread,
Feb 22, 2013, 8:13:17 AM2/22/13
to
> 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.

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...

Alessandro Pellizzari

unread,
Feb 22, 2013, 8:21:19 AM2/22/13
to
Il Fri, 22 Feb 2013 14:13:17 +0100, oss ha scritto:

> Poi in effetti non ne sono sicurissimo dato che non conosco il
> 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.

oss

unread,
Feb 22, 2013, 9:58:17 AM2/22/13
to
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.

Alessandro Pellizzari

unread,
Feb 22, 2013, 10:22:12 AM2/22/13
to
Il Fri, 22 Feb 2013 15:58:17 +0100, oss ha scritto:

> In questo caso la dichiarazione della funzione mi ricordava vagamente le
> closure in js (ma ha senso parlare di closure in jquery?).

jQuery è Javascript. :)
Quindi sì, le closure sono le stesse di JS.

In realtà $() è una funzione. Precisamente è un alias per la funzione
jQuery()
E` una funzione che accetta una funzione come parametro, e la richiama al
load completo. Potresti scrivere

function onLoad()
{
alert('caricata');
}

$(onLoad);

E avresti lo stesso risultato di

$(function() { alert('caricata'); });

Occhio a non chiamarla così:

$(onLoad());

perché così passeresti il risultato della chiamata a onLoad e non la
funzione onLoad stessa. :)

Ma se stai studiando JS probabilmente ci sei già arrivato.

> Per inciso c'è un'altra espressione ricorrente delle funzioni che vedo
> di jquery di cui non conosco il significato:
> $(document).ready(function()

E` uguale. Una è l'alias dell'altra.

> 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.

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

Bye.

oss

unread,
Feb 22, 2013, 3:46:40 PM2/22/13
to
> In realtà $() è una funzione. Precisamente è un alias per la funzione
> jQuery()
> E` una funzione che accetta una funzione come parametro, e la richiama al
> load completo. Potresti scrivere
>
> function onLoad()
> {
> alert('caricata');
> }
>
> $(onLoad);
>
> E avresti lo stesso risultato di
>
> $(function() { alert('caricata'); });
>
> Occhio a non chiamarla così:
>
> $(onLoad());
>
> perché così passeresti il risultato della chiamata a onLoad e non la
> funzione onLoad stessa. :)
>
> Ma se stai studiando JS probabilmente ci sei già arrivato.
>
>> Per inciso c'è un'altra espressione ricorrente delle funzioni che vedo
>> di jquery di cui non conosco il significato:
>> $(document).ready(function()
>
> 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() {
...
});
});

Marco Albarelli (fu Motosauro) @fisso

unread,
Feb 22, 2013, 6:30:28 PM2/22/13
to
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

Alessandro Pellizzari

unread,
Feb 23, 2013, 4:48:52 AM2/23/13
to
Il Fri, 22 Feb 2013 21:46:40 +0100, oss ha scritto:

> E che significato devo attribuire allora a una funzione fatta così?

> $(function () {
> $(document).ready(function() {

"Code smell" penso sia la definizione più adatta. :)

Bye.

ZER0

unread,
Feb 23, 2013, 6:45:50 AM2/23/13
to
On 22/02/13 14:21 , Alessandro Pellizzari wrote:

> Detto in parole povere significa "esegui questa function quando la pagina
> 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.

0 new messages