Google Gruppi non supporta più i nuovi post o le nuove iscrizioni Usenet. I contenuti storici continuano a essere visibili.

Esiste require_once() in javascript?

4 visualizzazioni
Passa al primo messaggio da leggere

Francesco M.

da leggere,
29 mar 2007, 19:38:2129/03/07
a

Ciao.

Sono ai primi esperimenti in JS.
In PHP esistono le funzioni require() e require_once() che includono
(pena lo stop dello script) dei file negli script. In particolare, la
seconda funzione controlla anche che l'inclusione di un certo file
avvenga al massimo una sola volta. In JS esiste qualcosa di simile?

Se in foo.js volessi 'caricare' il file bar.js per utilizzare una
funzione contenuta in tale file, come posso fare?

Insomma, esistono gli equivalenti in JS di quelle due funzioni PHP?

Grazie.
Francesco


ZER0

da leggere,
30 mar 2007, 03:21:2530/03/07
a
On Thu, 29 Mar 2007 23:38:21 GMT, Francesco M. wrote:

> Se in foo.js volessi 'caricare' il file bar.js per utilizzare una
> funzione contenuta in tale file, come posso fare?

Nativamente non esiste nulla del genere, dato che i file JS vengono
inclusi, nei browser, da codice di markup.
Ci sono "soluzioni" manuali, ognuna con i suoi pro e contro. Se vai
a cercare negli archivi di questo NG, dovresti trovare qualche post
interessante. Prova a usare come chiave di ricerca "include" oppure
"includere".

> Insomma, esistono gli equivalenti in JS di quelle due funzioni PHP?

No, si dovrą aspettare JS 2.0 per questo.

--
~ Il lavoro č quel lasso di tempo che intercorre tra una pausa caffč e
l'altra.

Francesco M.

da leggere,
30 mar 2007, 08:14:4330/03/07
a
ZER0 wrote:
> > Se in foo.js volessi 'caricare' il file bar.js per utilizzare una
> > funzione contenuta in tale file, come posso fare?
> Nativamente non esiste nulla del genere, dato che i file JS vengono
> inclusi, nei browser, da codice di markup.

Nel frattempo, ho risolto in maniera semplice così:

function inc(src) {
document.write('<script type="text/javascript" src="' + src +
'"><\/script>');
}

inc('/path/to/bar.js');

L'aspetto negativo è che non posso immediatamente utilizzare le funzioni
definite in bar.js. Per fortuna nel mio caso non devo usarle subito.

Per l'"_once()" basterà inserire il nome del file in un array e
controllare che il file da includere non sia presente.

(ps. non mi aspettavo di dover fare l'escape di '/' ...)

> Ci sono "soluzioni" manuali, ognuna con i suoi pro e contro. Se vai
> a cercare negli archivi di questo NG, dovresti trovare qualche post
> interessante. Prova a usare come chiave di ricerca "include" oppure
> "includere".

Ora lo faccio. Avrei dovuto farlo _prima_ di postare. :(

Grazie.
F.


ZER0

da leggere,
30 mar 2007, 08:27:5930/03/07
a
On Fri, 30 Mar 2007 12:14:43 GMT, Francesco M. wrote:

>>> Se in foo.js volessi 'caricare' il file bar.js per utilizzare una
>>> funzione contenuta in tale file, come posso fare?
>> Nativamente non esiste nulla del genere, dato che i file JS vengono
>> inclusi, nei browser, da codice di markup.

> Nel frattempo, ho risolto in maniera semplice cosě:

Che č uno dei modi che troverai negli archivi. Ti consiglio, perň, di
utilizzare anche il document.open e, soprattutto, il document.close.

>
> function inc(src) {
> document.write('<script type="text/javascript" src="' + src +
> '"><\/script>');
> }
>
> inc('/path/to/bar.js');

> L'aspetto negativo č che non posso immediatamente utilizzare le funzioni
> definite in bar.js.

Lo puoi fare se chiudi il tag. Per spiegarmi meglio, questo ti genera
errore:

<script type="text/javascript">
inc("/your/file.js");
inc("/your/file2.js");

aFunctionDefinedInPreviousFiles();
</script>

Mentre cosě:

<script type="text/javascript">
inc("/your/file.js");
inc("/your/file2.js");
</script>

<script type="text/javascript">
aFunctionDefinedInPreviousFiles();
</script>

> Per fortuna nel mio caso non devo usarle subito.

Altri approcci possono permetterti di usare subito il codice presente
nel file caricato; ma ogni metodo ha i suoi pro e i suoi contro.

> Per l'"_once()" basterŕ inserire il nome del file in un array e


> controllare che il file da includere non sia presente.

O fare semplicemente come gli include in C.

> (ps. non mi aspettavo di dover fare l'escape di '/' ...)

Lo puoi fare se chiudi il tag. Per spiegarmi meglio, questo ti genera
Questo perché altrimenti ti considera quel tag come la chiusura dello
script in cui sei, non che vai a scrivere. Del resto, ti trovi sempre
in HTML. Un modo era anche spezzare la stringa:

document.write('<script type="text/javascript" src="' + src +

'"></sc"+"ript>');

> Grazie.

De nada.

--
~ "Quando i morti camminano, signori, bisogna smettere di uccidere.
O si perde la guerra." (Zombie)

Francesco M.

da leggere,
30 mar 2007, 10:39:0230/03/07
a
On Fri, 30 Mar 2007 14:27:59 +0200, ZER0 <zer0....@libero.it> wrote:

> <script type="text/javascript">
> inc("/your/file.js");
> inc("/your/file2.js");
> </script>
>
> <script type="text/javascript">
> aFunctionDefinedInPreviousFiles();
> </script>

Interessante questa cosa.
Hai qualche riferimento in cui viene spiegato il comportamento
dell'interprete JS dei browser (ammesso che esista uno standard) ?

> > Per l'"_once()" basterà inserire il nome del file in un array e


> > controllare che il file da includere non sia presente.
> O fare semplicemente come gli include in C.

Be', però così facendo - correggimi se sbaglio - non si può inserire due
volte lo stesso file js, cosa che eventualmente si potrebbe invece
volere. Però, forse, se si vuole inserire due volte lo stesso file forse
si poteva riprogettare meglio il codice. :-)

> Questo perché altrimenti ti considera quel tag come la chiusura dello
> script in cui sei, non che vai a scrivere. Del resto, ti trovi sempre
> in HTML. Un modo era anche spezzare la stringa:
>
> document.write('<script type="text/javascript" src="' + src +
> '"></sc"+"ript>');

Ah, quindi l'"errore" è a livello di parsing html.
Se avessi scritto io il parser, avrei prima di tutto sostituito le
stringhe costanti con dei riferimenti, e non sarebbe successo. ;-)

Del resto, anche in PHP questo codice:

<?php echo "Il tag ?> chiude l'interprete PHP"; ?>

giustamente non dà errore.

Ciao e grazie.
F.


ZER0

da leggere,
30 mar 2007, 11:10:5630/03/07
a
On Fri, 30 Mar 2007 14:39:02 GMT, Francesco M. wrote:

>> <script type="text/javascript">
>> inc("/your/file.js");
>> inc("/your/file2.js");
>> </script>
>>
>> <script type="text/javascript">
>> aFunctionDefinedInPreviousFiles();
>> </script>

> Interessante questa cosa.
> Hai qualche riferimento in cui viene spiegato il comportamento
> dell'interprete JS dei browser (ammesso che esista uno standard) ?

Ogni browser fa a modo suo. Delle volte il comportamento è ben
documentato, delle altre no. Nel nostro caso, la spiegazione è
abbastanza semplice: Se non viene chiuso il tag il browser non
elabora ciò che hai inviato al buffer di output, come codice.

>>> Per l'"_once()" basterà inserire il nome del file in un array e
>>> controllare che il file da includere non sia presente.

>> O fare semplicemente come gli include in C.

> Be', però così facendo - correggimi se sbaglio - non si può inserire due
> volte lo stesso file js, cosa che eventualmente si potrebbe invece
> volere.

Direi di no. :)

> Però, forse, se si vuole inserire due volte lo stesso file forse
> si poteva riprogettare meglio il codice. :-)

Esattamente. Se si fa l'inclusione dello stesso file due volte
c'è qualche problema di analisi a monte. :)

> Ah, quindi l'"errore" è a livello di parsing html.

Esatto.

> Se avessi scritto io il parser, avrei prima di tutto sostituito le
> stringhe costanti con dei riferimenti, e non sarebbe successo. ;-)

Ragioni come se il parser fosse unico, mentre non è così. Sono
nettamente separati, e "casualmente" interagiscono. Ad esempio
non avresti avuto quel tipo di problema, se l'istruzione fosse
stata in un file esterno.



> Del resto, anche in PHP questo codice:

[..]
> giustamente non dà errore.

Perché hai appunto un parser unico che si preoccupa di gestire
il tutto. Non puoi confrontare lo sviluppo client web con PHP,
sono due cose del tutto diverse.
Non è PHP che è "embeddato" in una pagina HTML, è PHP che crea
la pagina HTML.

--
~ "Affronta gli ostacoli e fa qualcosa per superarli.
Scoprirai che non hanno neanche la metà della forza che pensavi
avessero." (Norman Vincent Peale)

gnurant

da leggere,
30 mar 2007, 14:44:5630/03/07
a

Magari dico una sciocchezza, ma non potevi chiamare semplicemente i due
files JS dallo stesso file HTML?


0 nuovi messaggi