Ti stai chiedendo come passare variabili e dati dal PHP al JavaScript? Ci sono diversi metodi disponibili, e in questo articolo esploreremo le opzioni migliori per raggiungere il tuo obiettivo!
Ciao, sono Lorenzo Neri, un informatico. Creo contenuti per aiutarti a padroneggiare l’arte del nuovo millennio: l’informatica!
Ho creato questo blog per raccogliere e condividere soluzioni ai problemi di programmazione che ho affrontato nella mia carriera, in particolare riguardanti PHP e JavaScript.
Se sei qui, è probabile che stia cercando un modo per risolvere il “maledettissimo” problema di passare variabili dal PHP al JavaScript. Permettimi di accompagnarti in questa avventura!
Come passare variabili e dati dal PHP al JavaScript: partiamo da un esempio
Immagina questo scenario: hai una variabile PHP e vuoi utilizzarla nel tuo codice JavaScript. Ecco un esempio di codice PHP:
<?php $variabilePHP = "Contenuto variabile"; ?> E vuoi accedere a questa variabile in JavaScript:
<script> variabileJavaScript = <?php $variabilePHP ?> </script> … Ma fammi indovinare: non funziona, vero?
Non preoccuparti, esistono diversi modi per passare variabili e dati dal PHP al JavaScript. Esploriamoli insieme!
Metodo 1: Passare dati dal PHP al JavaScript con AJAX
In questo caso, utilizzerai il codice PHP come una vera e propria API.
Vantaggi: Separi la logica del front-end e del back-end, rendendo il tuo codice più flessibile e leggibile.
Svantaggi: Potresti incontrare una leggera latenza, poiché il browser deve aspettare la risposta del server.
Ecco un esempio pratico:
<?php $variabilePHP = "Contenuto variabile"; echo json_encode($variabilePHP); ?> Codice JavaScript:
<script> var richiesta = new XMLHttpRequest(); richiesta.onload = function() { alert(this.responseText); }; richiesta.open("get", "server.php", true); richiesta.send(); </script> Metodo 2: Stampare i dati nel DOM
Un altro modo per passare variabili dal PHP al JavaScript è stamparle direttamente nel DOM. Per ulteriori dettagli sul DOM, consulta questa guida al DOM.
<div id="tagPHP" style="display: none;"> <?php echo htmlspecialchars($variabilePHP); ?> </div> <script> var div = document.getElementById("tagPHP"); var datiDalPHP = div.textContent; </script> Nota: questo metodo non è ideale dal punto di vista della sicurezza.
Metodo 3: Stampare direttamente nel JavaScript
Il metodo più diretto consiste nel stampare la variabile PHP direttamente nel codice JavaScript. Puoi scoprire di più sulla funzione `json_encode` nella documentazione ufficiale di PHP.
var variabileJavaScript = <?php echo json_encode($variabilePHP, JSON_HEX_TAG); ?>; Questo metodo è rapido e funziona bene in molti casi, ma presta attenzione a non lasciare informazioni sensibili esposte nel client.
Questo articolo ti è stato utile? Puoi lasciare un commento qui sotto, condividere l’articolo o iscriverti alla mia newsletter!

25 commenti
Ciao Lorenzo, sto impazzendo per ottenere risposte da un file php che esegue query in un db mysql.
Non riesco a capire cosaci sia di diverso tra il tuo script e quello che ho modificato secondo le mie necessità.
Questa la parte javascript:
alert(phpRun(“/home/sysop/getevent.php”));
e questa la parte ajax che dovrenne richiamare lo script:
function phpRun(element){
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(this.responseText);
}
};
xhr.open(‘get’, element,true);
xhr.send()
}
Il problema è che quando faccio l’alert dell’output dello script php, invece che darmi l’uscita della query mi da lo script del php e non so perchè.
Questa la parte finale dello script php che se chiamato da terminale funziona a dovere.
if ($result -> num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo json_encode($row[“code”] . “|” . $row[“date”] . “|” . $row[“latitude”] . “|” . $row[“longitude”] . “|” . $row[“depth”] . “|” . $row[“magnitude”] . “|” .$row[“locality”] . “|” . $row[“created”]);
}
} else {
echo json_encode(“”);
}
Ciao Sergio, grazie del tuo commento!
Ti dà lo script del PHP nel senso che ti dà in output il codice che mi hai incollato?
Sei sicuro che l’URL che hai passato al Javascript sia quello che lui stesso vede come corretto per l’indirizzo dello script PHP che stai chiamando?
Ciao Lorenzo, grazie per la risposta.
No, proprio lo script del php.
Mi è venuto in mente che la chiamata al programma da javascript, manca del parametro php.
Ora provo a vedere cosa succede inserendo, prima del nome del programma, “php”.
No, non mi da nulla.
Tornando alla discussione precedente, in pratica nel richiamare la funzione da javascript, do il comando
alert(phpRun(“/home/sysop/getevent.php”));
e nel comando ajax c’è
alert(this.responseText);
e quello che vedo nel browser prima mi da la chiamata da java con “undefined”, e poi quello da ajax con il listato dello script (per maggiore sicurezza, ho inserito un alert immediatamente prima dell’alert(this.responseText).
Ciao Sergio, il problema credo sia dato dal fatto che il percorso che hai impostato per l’URL PHP non sia valido. Fai una prova: metti nella stessa cartella lo script javascript e quello PHP per vedere se la chiamata avviene correttamente, ma nella chiamata a funzione, anziché impostare “/home/sysop/getevent.php” metti semplicemente “./getevent.php”.
Fammi sapere, ci tengo!
Ciao Lorenzo,
ho provato come mi hai detto, ma non è cambiato nulla.
Ora volgio vederlo quando lo inserisco nella pagina dove gira l’html con php ecc, poi ti faccio sapere
No, non va comunque…
Ok, mi ero sbagliato. Finalmente sono riuscito a far girare lo script php ed a produrre un output.
Questo probabilmente perchè il php non funziona all’esterno di cartelle predeterminate, (ma se mettevo php prima del nome dello script come una richiesta in linea non era uguale?)
Il problema però è che ora, con l’echo che scrivo in php, apre una finestra come l’alert di javascript. Come posso passare questo output ad una variabile?
Ci sono riuscito!!!!
Dopo aver trasportato il tutto su una directory in cui poteva lavorare php (giustamente per sicurezza lato server non può lavorare da tutte le parti… ammazzate oh!) sono riuscito a riprendere i dati e memorizzarli in una variabile.
In pratica, nella funzione di chiamata al php, ho impostato una variabile all’interno della funzione, che poi valorizzo con response.Text.
Fatto ciò, il ritorno non poteva avvenire subito dopo , ma alla fine della funzione.
Un altro problema che incontravo era che usciva quando ancora lo script di php non aveva finito l’elaborazione. E’ bastato mettere false nella open del post e tutto funziona a meraviglia.
Questa la funzione che ho fatto:
// gets an XMLHTTP request object
function createRequestObject() {
var ro;
if (window.XMLHttpRequest){
ro=new XMLHttpRequest();
} else {
ro=new ActiveXObject(“Microsoft.XMLHTTP”);
}
return ro;
}
function phpRun(element,request){
var return_func;
var xhr = new createRequestObject();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
return_func = this.responseText;
}
};
xhr.open(‘POST’, element,false);
xhr.send(request.value)
return return_func;
}
No, non va secondo le mie aspettative.
Quando da javascript richiamo il file PHP, questo dovrebbe fare una ricerca in un database in base ad alcuni parametri che gli passo.
Ho provato ad inserire, nella stringa che richiama lo script PHP, una query in mysql (nel caso specifico è ‘SELECT * FROM tabella WHERE code = “OB2021jmpcds”;’.
Utilizzando firefox con ‘strumenti di sviluppo web’, se io aggiungo questa riga mi da questo errore:
Uncaught TypeError: phpRun(…) is undefined
All’interno delllo script PHP, sono riuscito a gestire gli argomenti passati tramite la variabile $argv e, da terminale se do questa informazione me la restituisce normalmente
Buongiorno Sergio,
Intanto mi fa piacere che tu sia riuscito a portarti avanti con la risoluzione dei problemi!
Tuttavia noto che c’è ancora un pezzo che non funziona troppo bene a livello di comunicazione. Prova a fare così: riesci a mettermi il tuo codice su un pastebin così da capire meglio con il codice ben indentato? https://pastebin.com/
Grazie, a presto!
Buongiorno Lorenzo,
ho visto il sito, ma non ho capito come funziona, come fare per poterlo passare a te
Qui trovi specifiche in merito: https://www.youtube.com/watch?v=y64dIhyU44c
Mi sono segnato a pastebin, ed ho anche caricato gli script, ma ora non so come renderli pubblici perchè tu possa vederli
Fatto..
Ciao Sergio, senza link mi viene difficile trovarli…
Credo che questo non vada bene, ma ci provo
https://pastebin.com/u/SergioT59
Non so come renderli visibili agli altri
Sono uscito da pastebin e rientrato senza fare il login. Quel link dovrebbe funzionare
Anziché fare “if (count($argv) !=2 )” prova semplicemente a fare “if (isset($_GET[“search”])”
Bene, vedo con piacere che sono riuscito a farti vedere il codice…
Hai capito cosa intendo fare?
No, non funziona
Salve Sergio, in questa situazione penso che l’unica cosa sia quella di pianificare una consulenza specifica perché non riesco ad aiutarti così.
Se hai piacere, possiamo sentirci via mail: hello@lorenzoneri.com
Sentiamoci lì per organizzarla, grazie!
Ciao Lorenzo,
dopo molti tentativi sono riuscito a capire perchè non andava..
Il problema era nel passaggio dallo script AJAX verso PHP.
Per poter funzionare il metodo $_GET del PHP, bisogna passare la richiesta tramite l’open del post, inserendo, dopo la richiesta del file, il carattere ‘?’ seguito dalla richiesta che deve operare.
In pratica la riga dell’open deve diventare una cosa del genere:
./getevent.php?search=SELECT * FROM shakeEvents WHERE code = \”OB2021jmpcds\”;
a questo punto il metodo get ritrova la parola chiave search e ne estrae il contenuto dopo il carattere ‘=’ e, fatta l’estrazione dal database, la restituisce tramite il comando echo del php.
Grazie ancora del tempo prezioso che mi hai dedicato e spero che questo possa essere d’aiuto per qualcun’altro.