Pagina 1 di 37 1 2 3 11 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 366
  1. #1

    [PILLOLA] interazione PHP e Javascript

    Ciao,

    in questi giorni sto perfezionando uno scriptino a cui avevo iniziato a lavorare tempo fa e che poi avevo abbandonato per mancanza di tempo.
    Avrei voluto scrivere un articolo su freephp.html.it in proposito, ma (sempre per mancanza di tempo) credo che dovrò aspettare un po'.
    Intanto tiro fuori questa suppostina, sperando vi piaccia ;-)

    Un grazie a Skidx e Kuarl con i quali tempo fa ho chiacchierato di questa cosa


    Non sarebbe bello far interpretare a Javascript il formato di serializzazione di PHP e rendere trasparente il passaggio dei dati da PHP a Javascript e viceversa?
    Magari abbinare questa possibilità all'utilizzo di AJAX (che non è una squadra di calcio ma un brutto acronimo che sta ad indicare la possibilità di effettuare HTTP Request in PHP, un po' come si fa in actionscript con Flash).
    http://en.wikipedia.org/wiki/AJAX

    gmail è l'esempio di maggiore successo di AJAX

    Solo che anzichè usare XML potremmo rendere a PHP le cose semplici (un serialize() e il gioco è fatto, e facciamo fare il lavoro faticoso a Javascript).

    In sostanza qualsiasi variabile PHP può essere serializzata,
    http://freephp.html.it/articoli/view_articolo.asp?id=74


    e attraverso uno dei due Javascript che ho realizzato, deserializzata e diventare una variabile JS.

    Ecco un'esempio puramente dimostrativo

    codice:
    <html>
    <head>
    <script language="JavaScript" type="text/javascript" src="./js2php/PHPunserializer.js"></script>
    <script language="JavaScript"  type="text/javascript" src="./js2php/PHPserializer.js"></script>
    
    </head>
    <body>
    <script language="JavaScript" type="text/javascript">
    
    /****
    Da PHP a JS
    ****/
    /*
    phpStr è una variabile Javascript che contiene una stringa d'esempio ottenuta attraverso PHP facendo
    
    $a = array('a', 'b', 1,2,3,4, array('alfa','beta','gamma','delta'), 7, 8, '10', 'ufo'=> 'booo!') ;
       
    echo addslashes(serialize($a)) ;
    
    */
    
     var phpStr = 'a:11:{i:0;s:1:\"a\";i:1;s:1:\"b\";i:2;i:1;i:3;i:2;i:4;i:3;i:5;i:4;i:6;a:4:{i:0;s:4:\"alfa\";i:1;s:4:\"beta\";i:2;s:5:\"gamma\";i:3;s:5:\"delta\";}i:7;i:7;i:8;i:8;i:9;s:2:\"10\";s:3:\"ufo\";s:5:\"booo!\";} ' ;
    
     var unserializer =  new PHPunserializer() ;
     var php2js = unserializer.parse(phpStr) ;
     
     //stampa "gamma"
     alert(php2js[6][2]) ;
     
    
    /****
    Da JS di nuovo a PHP
    ****/
    
    var serializer =  new PHPserializer() ;
    var js2php = serializer.render(php2js) ;
    
    //stampa una stringa che può essere correttamente letta dalla funzione PHP usnerialize()
    document.write(js2php) ;
    </script>
    
    </body>
    </html>
    Nell'esempio io ho iniettato direttamente la stringa PHP, ma in realtà la comunicazione da PHP a JS e Viceversa dovrebbe avvenire attraverso l'oggetto XMLHTTP

    Per saperne di più su AJAX e XMLHTTP
    http://pro.html.it/articoli/id_591/idcat_11/pro.html

    http://www.phpnews.it/content/view/267/80/


    Se volete fare qualche prova trovate le classi Javascript che ho realizzato qui
    http://digilander.libero.it/dustbin0/js2php.zip





    P.s.
    la tecnica che sto utilizzando è abbastanza conosciuta tra chi programma in Flash, io stesso ho realizzato una versione anche per Actionscript.
    Se siete interessati a Flash però ci sono già delle ottime classi che hanno portato molto avanti questo utilizzo della serializzazione PHP

    Ad esempio da un'idea originaria di Sephirot qualcuno ha tirato fuori PHpObject
    http://ghostwire.com/go/28

    P.p.s
    E se non volessimo usare XMLHTTP, se volessimo soltanto tradurre un oggetto o un array PHP rendendolo direttamente fruibile in Javascript?

    Un sistema (non, l'ho ancora testato molto) potrebbe essere questo...

    Anzichè far creare il Javascript a PHP, iniettiamo nel Javascript solo una stringa PHP serializzata

    <?php
    //funzione ausiliaria
    function jscriptize($content)
    {
    return("'".addslashes($content)."'+\n") ;
    }

    //funzione principale
    function toJS($phpVar, $varName = 'php')
    {
    $jsBegin = "var {$varName}=" ;
    $jsBody = wordwrap(serialize($phpVar), 35, "+", true) ;
    $jsBody = explode('+', $jsBody) ;
    $jsBody = array_map('jscriptize', $jsBody) ;
    $jsBody = $jsBegin . substr(join('', $jsBody), 0, -2) . ';' ;

    return($jsBody) ;
    }

    //Oggetto PHP di test
    $x = new stdclass ;
    $x->a = array(
    12,
    'uno' => 10,
    'due' => null,
    25 ,
    array('hello', 'ho " la','ciao','hi')
    ) ;
    $x->b = 'ciao a tutti bell\'i + e brutti { è à ò' ;

    echo( toJS($x) ) ;
    /*
    Stampa qualcosa del genere che poi può essere utilizzato dall'userializer in javascript

    var php='O:8:\"stdClass\":2:{s:1:\"a\";a:5:{i:0;'+
    'i:12;s:3:\"uno\";i:10;s:3:\"due\";N;i:1'+
    ';i:25;i:2;a:4:{i:0;s:5:\"hello\";i:1;'+
    's:7:\"ho \"'+
    'la\";i:2;s:4:\"ciao\";i:3;s:2:\"hi\";}}s'+
    ':1:\"b\";s:38:\"ciao a tutti bell\'i '+
    ' e brutti { è à ò\";}';
    */
    ?>
    per favore NIENTE PVT TECNICI da sconosciuti

  2. #2
    Fatto ulteriori prove con XMLHTTP usando la serializzazione PHP al posto di XML per la trasmissione dei dati e funziona perfettamente.

    Ecco un esempio

    #FILE phpData.php (riceve la request e restituisce i dati)

    <?php


    //fingiamo che $x sia l'array risultante da una query al db

    $x = array() ;

    $x[0] = array(

    'nome' => 'Mario',
    'cognome' => 'Rossi',
    'indirizzo' => 'Via delle Grazie 10',
    'citta' => 'Treviso',
    'telefono' => '3337169310'
    ) ;
    $x[1] = array(

    'nome' => 'Ugo',
    'cognome' => 'Bretella',
    'indirizzo' => 'Via dell\'industria 10',
    'citta' => 'Padova',
    'telefono' => '3334427567'
    ) ;

    //quale record voglio prelevare?

    //un po' di validazione dell'input
    if(isset($_REQUEST['record']) && trim($_REQUEST['record'])!='' && isset($x[$_REQUEST['record']]))
    {
    $record = $x[$_REQUEST['record']] ;
    }
    else
    {
    //se il record richiesto non esiste restituisco il primo
    $record = 0 ;
    }

    //serializzo e invio all'output con echo
    echo(serialize($record)) ;
    ?>

    #FILE jsReader (effettua la request e riceve i dati)

    <html>
    <head>
    <script language="JavaScript" type="text/javascript" src="./js2php/PHPunserializer.js"></script>
    <script language="JavaScript" type="text/javascript" src="./js2php/PHPserializer.js"></script>
    <script>
    /*
    Funzione crossbrowser per l'oggetto XMLHTTP
    */
    //explorer
    function getXMLHttp(){
    var xmlhttp = null;
    if (window.ActiveXObject) {
    if (navigator.userAgent.toLowerCase().indexOf("msie 5") != -1) {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    }
    //Mozilla
    else if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
    xmlhttp = new XMLHttpRequest()
    }
    return xmlhttp
    }

    function elaboraRisposta()
    {
    if (objHTTP.readyState == 4) {

    /******
    elaborazione : da array associativo PHP ad oggetto Javascript
    ******/
    var unserializer = new PHPunserializer() ;
    var php2js = unserializer.parse(objHTTP.responseText) ;

    alert(php2js['indirizzo']) ;
    }

    }

    function getData(recordNum)
    {
    objHTTP = getXMLHttp();

    objHTTP.open("GET", "phpData.php?record="+recordNum, true);

    objHTTP.onreadystatechange = elaboraRisposta ;

    objHTTP.send(null)
    }
    </script>
    </head>


    <body>
    Vedi record 1

    vedi record 2

    </body>

    <html>
    per favore NIENTE PVT TECNICI da sconosciuti

  3. #3
    ciao Fabio, grazie per la utile pillola.

    Unica cosa, sto' facendo un po' di prove ma ho un gran bel problema ... hai qualche esempio di come inviare via POST e non via GET ???
    [ possibilmente senza SOAP o API dedicate di terzi ... ]

    solo il Js, il server non mi interessa, grazie
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Ciao Andr3a,

    guarda il secondo esempio qui
    http://bazzinet.info/JS-Request

    per favore NIENTE PVT TECNICI da sconosciuti

  5. #5
    come avevo già avuto modo di dire a Fabio, mi sembra assai interessante, ora che l'utilizzo di javascript sta tornando finalmente di moda

  6. #6
    Originariamente inviato da Fabio Heller
    guarda il secondo esempio qui
    http://bazzinet.info/JS-Request
    grazie mille, non trovavo esempi decenti, fortuna tu




    Originariamente inviato da skidx
    come avevo già avuto modo di dire a Fabio, mi sembra assai interessante, ora che l'utilizzo di javascript sta tornando finalmente di moda
    talmente interessante che non ho capito perche' nessuno ha ancora fatto un oggetto LoadVars per JavaScript ... tocca fare sempre tutto a me



    Source code con tanto di demo on-line

    Fatemi sapere

    P.S. per chi mastica un po' di ActionScript ... e' lui, identico, l' ho clonato praticamente in tutto ... a me sembra una cosa sbavosa
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Molto interessante questo sistema per passare stringhe javascript a php.
    Io vorrei passarci il contenuto di un iframe (con DesignMode ad On), tutto il contenuto HTML, dal tag <HTML> al tag </HTML>, ma dovrei prima saperlo puntare con javascript.

    Conoscete i metodi del vettore "frames" da utilizzare?
    Emanuele
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  8. #8
    No problem, ho risolto (!)
    Il codice js per puntare il contenuto html dell'iframe è:
    framename.document.body.innerHTML

    Per verificarne il contenuto basta un semplice alert box da un button con metodo onClick="prova()"

    <SCRIPT Language="Javascript">
    function prova() {
    a = html_text.document.body.innerHTML;
    alert(a);
    }
    </SCRIPT>

    Bye boys
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  9. #9
    Originariamente inviato da andr3a
    talmente interessante che non ho capito perche' nessuno ha ancora fatto un oggetto LoadVars per JavaScript ... tocca fare sempre tutto a me



    Source code con tanto di demo on-line

    Fatemi sapere

    P.S. per chi mastica un po' di ActionScript ... e' lui, identico, l' ho clonato praticamente in tutto ... a me sembra una cosa sbavosa
    ed io che pensavo di aver rivoluaionato il web


    allora ... forse questo esempio e' piu' esplicativo, zero Flash, simple Chat
    http://www.devpro.it/jas_chat/
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Ciao Andrea,

    molto interessante, penso che nessuno ci abbia ancora pensato perchè XMLHTTP sta cominciando ad essere usato seriamente soltanto negli ultimi tempi.
    Sicuramente usarlo nel formato Actionscript lo rende più intuitivo e immediato da utilizzare.

    Non l'ho ancora testato, hai fatto anche in modo che se la pagina che emette il response butta fuori un

    variabile=valore il loadVars Javascript al caricamento conterrà variabile tra le sue proprietà?

    In ogni caso in questo thread avevo usato XMLHTTP solo per mostrare un utilizzo delle classi che traducono PHP in JS e viceversa, per il LoadVars JS sarebbe forse utile una pillola apposita nel forum di Scripting
    per favore NIENTE PVT TECNICI da sconosciuti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.