Richiamare funzioni esterne JS da PHP

Discussione in 'PHP' iniziata da AndreaJK01, 9 Luglio 2018.

Tag (etichette):
  1. AndreaJK01

    AndreaJK01 Nuovo Utente

    Registrato:
    9 Luglio 2018
    Messaggi:
    3
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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!
     
  2. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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 .....
     
  3. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    556
    Mi Piace Ricevuti:
    26
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    La spiegazione di @marino51 è abbastanza chiara mantenendo un flusso call<->action ossia 1 a 1, ossia per il postulato
    .

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

    AndreaJK01 Nuovo Utente

    Registrato:
    9 Luglio 2018
    Messaggi:
    3
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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?
     
  5. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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: 11 Luglio 2018
  6. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    556
    Mi Piace Ricevuti:
    26
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    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.
     
  7. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    @macus_adi , ti faccio presente chi ha fatto la domanda,
    nel mio piccolo ho cercato di dare una risposta nella maniera più semplice possibile,

    certo
    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,
    ma php è usato per scrivere codice html e magari anche js per avere pagine dinamiche o per altre cose ?
    at salut
     
    Ultima modifica: 11 Luglio 2018
  8. AndreaJK01

    AndreaJK01 Nuovo Utente

    Registrato:
    9 Luglio 2018
    Messaggi:
    3
    Mi Piace Ricevuti:
    0
    Punteggio:
    1
    Sesso:
    Maschio
    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.
     
  9. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    556
    Mi Piace Ricevuti:
    26
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    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...
    -
    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.....
     
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.238
    Mi Piace Ricevuti:
    110
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    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: 11 Luglio 2018
Sto caricando...

Condividi questa Pagina