Richiamare funzioni esterne JS da PHP

AndreaJK01

Nuovo Utente
9 Lug 2018
3
0
1
Salve a tutti,

ho passato circa 3 giorni a cercare di capire come risolvere questo problema, ma nonostante ciò sono rimasto al punto di partenza.
Premetto che sono alle prime armi con PHP e questo potrebbe rasentare un problema.
Ciò che vorrei fare, a parole, non sembra troppo complesso.
Vorrei richiamare una funzione JavaScript da PHP.
La mia pagina è strutturata in questo modo:
- File principale php dove è presente solo l'HTML del sito
- File JQuery esterno alla pagina principale
- File contenete le funzioni JS(JQuery) esterne alla pagina principale
- File contenete le funzioni PHP esterne alla pagina principale

Finché le funzioni PHP (che siano interne o esterne alla pagina principale) vanno a eseguire istruzioni JavaScript tutto bene. Funziona tutto.

Il problema sorge quando io voglio, con il PHP esterno richiamare funzioni JS presenti in un altro file.
Oltre a ciò, lo stesso problema si presenta quando io nel file PHP tento di eseguire istruzioni JQuery.
La pagina HTML, quando esaminata con il debugger di Chrome non presenta alcun tipo di errore.

Per richiamare funzioni da PHP a JS uso la seguente istruzione:

PHP:
echo "<script>funzioneJSoJQuery();</script>";

Grazie in anticipo a chiunque mi risponda.
Buona serata!
 
proviamo a distinguere chi fa cosa,

php lavora solo sul server,

il server (web) assembla una lunga stringa con il codice html, il codice javascript e quanto generato da php
(rispettando la giusta sequenza definita dallo sviluppatore)
php non esegue nessuna funzione javascript ma la inserisce come testo nella predetta lunga stringa
(echo scrive una stringa di caratteri, non esegue nulla)

la lunga stringa é la pagina che il server invia al client che l'ha richiesta

ed il browser presente sul client,
- interpreta la lunga stringa,
- compone graficamente la pagina
- ed esegue le funzioni javascript quando richiesto

nell'oscurità delle mie poche idee e ben confuse, PHP non eseguirà mai una funzione javascript sul server,
ma potrà interagire con la pagina visualizzata dal client, attraverso html e javascript (ajax)
che è diverso da "PHP esegue sul server una funzione javascript"

il codice html, javascript e php deve essere strutturato in modo che, quando php termina il suo lavoro, sul server,
il risultato sia la pagina (html + javascript + quant'altro consentito) da rappresentare attraverso il browser sul client

ma forse non ho capito la domanda .....
 
La spiegazione di @marino51 è abbastanza chiara mantenendo un flusso call<->action ossia 1 a 1, ossia per il postulato
PHP esegue sul server una funzione javascript
.

Fin qui tutto bene, @AndreaJK01 stando alle prime armi di php non credo tu intendessi chiamare funzioni js da php utilizzando anche un server node js, perchè in questo caso è possibilissimo farlo, solo che richiede programmazione avanzata di ambedue i linguaggi...

Per ovviare a questo problema potresti utilizzare le socket.
 
Salve,

grazie @marino51 e @macus_adi per le risposte.
Il mio problema riguarda questo:
Vorrei fare una pagina che rilevi tramite PHP indirizzo IP dell'utente, lingua default del Browser e altre cose puramente a scopo personale e didattico per fare i miei esperimenti con questo nuovo linguaggio che sto imparando.
Io vorrei suddividere la mia pagina in questo modo:
- PHP per la programmazione vera e propria, per gestire i dati e rilevare quanto scritto in precedenza
- JQuery per gestire le animazioni a seconda delle condizioni che si vengono a creare durante l'esecuzione dello Script PHP
- HTML, CSS per l'interfaccia della pagina.

Quello che vorrei fare è questo:
a seconda delle condizioni che si vengono a creare durante l'esecuzione dello script PHP lanciare (tramite lo stesso PHP) delle funzioni JavaScript (contenenti codici in JQuery).
Ad esempio, se lo Script PHP non riesce a rilevare l'indirizzo IP dell'utente allora esso lancerà la funzione JQuery che farà apparire una popup nella pagina con il messaggio: "Non riesco a trovare l'indirizzo IP". Effetto contrario se invece riesce a rilevarlo.
Stando a quando riferito da @marino51 il codice:
PHP:
echo "<script>miaFunzione();</script>";
aggiungerà solo questa funzione in JS alla pagina HTML, ma non la lancerà in modo "diretto".
Sapendo ciò, come è possibile che la stessa non venga interpretata dalla pagina?
Se si tratta di semplici funzioni come:
PHP:
echo "<script>Alert(\"Ciao!\");</script>";
allora tutto bene, ma quando viene richiamata una funzione presente in un altro file (.js) questa non viene letta.
Sapreste rispondermi?

Grazie @macus_adi per la risposta. Ora mi informerò su cosa sia un Socket. Ci sarebbero altri modi per risolvere questo problema?
 
un esempio molto semplice, mi sembra che ciò che vuoi ottenere sia,
upload_2018-7-10_23-45-16.png

la pagina è stata preparata con php sul server,
il client riceve la "lunga stringa" ed il browser la interpreta …

upload_2018-7-10_23-47-22.png

questo il codice php che l'ha generata
PHP:
<?php

$ip = "192.168.1.1";

$testo = "ho trovato IP = " . $ip;

displayPage();

function displayPage()
{
global $testo;
?>
<!DOCTYPE html>
<html lang="it">
    <head>
        <title>pagina preparata con php</title>
        <meta charset="utf-8">
    </head>

    <body>
        <h1>pagina preparata con php</h1>

        <h3><?php echo $testo; ?></h3>

        <script>alert("<?php echo $testo; ?>");</script>
    </body>
</html>
<?php
}
?>
come vedi dal secondo screen shot la "variabile" $testo é scritta in chiaro nella pagina come parte del codice html/javascript
php ha aggiunto la "stringa" …..

PHP:
P.S., la riga

       <script>alert("<?php echo $testo; ?>");</script>

può essere scritta anche così (per rispettare il tuo esempio) anche se più complicata

        <?php echo '<script>alert("' . $testo . '");</script>'; ?>
 
Ultima modifica:
Fasciarsi la testa per poco, mi sembra assurdo....
In primis è SBAGLIATO scrivere JS/HTML dentro codice PHP, quindi come sempre ribadisco:
Separate i concetti, la logica il trattamento dati e la visualizzazione, detto questo....

Se invece di utilizzare questa notazione poco performante e di difficile gestione, utilizzassi backbone con delle variabili in loco, quali localStorage, Cookie, Sessioni etc etc?

Non sarebbe più semplice....
La pagina index.php chiamerà il bootstrap dell'applicazione che avrà una Classe per gestire le eccezioni degli utenti, questa passa un OBJ a core Backbone e lo salvi in Localstorage, e gestisci le eccezioni da JS no da PHP.
 
@macus_adi , ti faccio presente chi ha fatto la domanda,
Premetto che sono alle prime armi con PHP e questo potrebbe rasentare un problema.

nel mio piccolo ho cercato di dare una risposta nella maniera più semplice possibile,

certo
backbone con delle variabili in loco, quali localStorage, Cookie, Sessioni etc etc?
La pagina index.php chiamerà il bootstrap dell'applicazione che avrà una Classe per gestire le eccezioni degli utenti, questa passa un OBJ a core Backbone e lo salvi in Localstorage, e gestisci le eccezioni da JS no da PHP.
la tua risposta la capiscono tutti al volo, e sono in grado di realizzare il codice in meno di 5 minuti con performances strabilianti

considera anche che l'argomento era la logica di base, non come costruire un'applicazione

da buon ultimo,
In primis è SBAGLIATO scrivere JS/HTML dentro codice PHP
ma php è usato per scrivere codice html e magari anche js per avere pagine dinamiche o per altre cose ?
at salut
 
Ultima modifica:
Salve,

grazie ad entrambi per le risposte.
Entrambi i metodi mi sembrano buoni anche se uno più complesso dell'altro.
Prima di continuare specifico una cosa che non ho fatto in precedenza.
Per me, essendo alle prime armi di PHP non "interessa" particolarmente la parte di velocità di caricamento e sicurezza essendo che le mie conoscenze sono ancora troppo limitate.
Detto ciò volevo fare un appunto sui vostri metodi:
Quello di @marino51 mi interessa, l'unico problema risiede nel fatto che nonostante sia valido, non permetta di "eseguire" la funzione che forse mi interessa più di tutte ovvero: scrivere script JQuery e farli eseguire/interpretare correttamente dal browser.
Come ho scritto in precedenza: scrivendo con PHP da file esterno, una stringa nella pagina HTML, questa funziona solo se è in JavaScript e non in JQuery.
Esempio pratico:
PHP:
//La seguente stringa funziona:
echo "<script>alert(\"Ciao!\");</script>";

//La seguente stringa non funziona:
echo "<script>$('#id').animate({\"height\":\"30px\"}, 600);</script>";
Oltre a ciò, finché c'è una sola funzione, tutto bene, ma quando si iniziano a scrivere 10/15 funzioni, il tutto viene più disordinato.
Queste sono le principali problematiche.

Per quanto riguarda il metodo di @macus_adi ci sono delle cose che vorrei cambiare.
Stando a quanto ho capito il tuo procedimento prevede di creare un file che faccia da intermediario tra i due linguaggi JS-PHP.
Per questo motivo io stavo pensando di fare una cosa che implicasse un file JSON. Con PHP eseguire le varie istruzioni e a seconda dell'esito scrivere il tutto in un file JSON. Poi con JQuery andare a leggerlo e, a seconda di quanto riportato, gestire le condizioni.
So che per programmatori esperti il mio metodo possa far rabbrividire, ma attualmente non ho altre soluzioni.

Come vi pare questa soluzione?
Nel file JQuery andrò ad impostare due funzioni che si richiamano a vicenda fino al termine dell'esecuzione del codice PHP in modo da non lasciare condizioni escluse.
Siate liberi di contestare.

Grazie e buon pomeriggio.
 
ma php è usato per scrivere codice html e magari anche js per avere pagine dinamiche o per altre cose ?
at salut
OK inutile replicare... Hai il tuo mondo, ma PHP è nato per altro... Un linguaggio lato server (non solo PHP) non dovrebbe creare JS ad-hoc, ma questo passo non mi interessa...
-
Stando a quanto ho capito il tuo procedimento prevede di creare un file che faccia da intermediario tra i due linguaggi JS-PHP.
Per questo motivo io stavo pensando di fare una cosa che implicasse un file JSON. Con PHP eseguire le varie istruzioni e a seconda dell'esito scrivere il tutto in un file JSON.

Semplicemente con Jquery scrivi una funzione che recuperi in ajax (o legge un file creato dal linguaggio lato server) dei dati che possono servire alla tua applicazione/client, come risultato dovrai scrivere cose dell'altro mondo del tipo:

Codice:
var obj=$.parseJSON(file/stringa_json_recuperata);
window.localStorage.setItem('nome_variabile',JSON.stringify(obj));

nel tuo file JS metti un if uno switch quello che ti pare e in base al parametro/i esegui la/e funzioni che più ti interessano, in questo modo puoi controllare anche quante volte devi recuperare le risorse....

Tutto qui, 2 linee di codice da perfetto extraterrestre.....
 
vedi questo codice, ho preso una base senza errori
ma non capisco lo scopo di ciò che vuoi fare (nella forma in cui lo vuoi fare),
php inserisce il js necessario
PHP:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<p>
By default, all HTML elements have a static position, and cannot be moved.
To manipulate the position, remember to first set the CSS position property of the element to relative, fixed, or absolute!
</p>
<br /><br />
<div style="background:#98bf21;height:100px;width:100px;position:absolute;"></div>
<script><?php echo "alert('clicca ok !'); $('div').animate({left: '250px'});" ?></script>
</body>
</html>
upload_2018-7-11_14-17-40.png

upload_2018-7-11_14-18-8.png

come vedi la funzione é stata eseguita

certo puoi usare questo sistema se vuoi creare una pagina "dinamica" facendo mettere a php le stringhe che servono

ma non pensare di legare php ad eventi che avvengono sulla pagina, a meno di usare ajax
(ho simulato un evento con "alert")
 
Ultima modifica:

Discussioni simili