Pagina 3 di 37 primaprima 1 2 3 4 5 13 ... ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 366
  1. #21
    Originariamente inviato da andr3a
    Perdonami Fabio, magari pero' puo' tornare utile a chi cerchera' in futuro un argomento come questo
    Nessun problema, al massimo aggiungo in calce alla tua pillola un link a questa e alle classi che traducono PHP in Javascript e viceversa

    Sempre per chi cercasse maggiori informazioni su PHP e Javascript

    Ho trovato due articoli su DevShed, non parlano di serializzazione ma possono tornare utili
    http://www.devshed.com/c/a/PHP/PHP-a...Client-part-1/
    http://www.devshed.com/c/a/PHP/PHP-a...Client-Part-2/
    per favore NIENTE PVT TECNICI da sconosciuti

  2. #22
    Un'altra soluzione possibile è quella di utilizzare JSON(JavaScript Object Notation) al posto di XML.
    In questo modo la creazione di un "linguaggio di comunicazione" tra PHP e JS avviene lato server.

    Come i dati serializzati sono facilmente comprensibili da PHP, JSON è semplicemente comprensibile da javascript. In pratica JSON è una sintassi di javascript che permette di scrivere array e oggetti in modo semplice.

    Un esempio di oggetto potrebbe essere questo:

    codice:
    var utente = { "nick" : "Fredx", "provenienza" : "milano" };
    in questo modo utente.nick sarà uguale a "Fredx" e utente.provenienza sarà uguale a "milano"

    un esempio di array è il seguente:

    codice:
    var utenti = ["Fredx", "saibal", "andr3a"];
    scambiare e gestire i dati in questo modo con AJAX è molto più semplice e meno dispendioso rispetto ad XML, sopratutto lato client è leggerissimo perché restituisce codice nativo di javascript, e non ha bisogno di conversioni.
    Quando però creiamo un oggetto o un array in PHP dobbiamo convertirlo in sintassi JSON. Per questo ci viene in aiuto una classe: JSON-PHP che permette di convertire array o oggetti in JSON e viceversa.

    in pratica nello script PHP ci basta creare un oggetto o un array (chiamiamolo $obj) e utilizzando il metodo encode della classe json possiamo trasformarlo in JSON:

    codice:
    $json->encode($obj);
    echo($obj);
    in questo modo restituiamo a javascript l'oggetto codificato, che potremo valutare e usare:

    codice:
    eval("var obj = " + httpObj.responseText + ";");
    A volte è meglio non scrivere niente e sembrare degli idioti, che postare e finire su uTonter

  3. #23
    Ciao Fredx,

    in effetti quando creo Javascript con PHP (ovvero faccio l'opposto di quanto spiegato in questa pillola, in cui serializzo PHP nel formato PHP, ed è javascript a fare tutta la fatica) uso proprio la notazione sintetica per array e oggetti.
    Quello che non sapevo è che questa notazione avesse un nome e fosse uscita dall'ambito Javascript per diventare uno standard per lo scambio dei dati (proprio come l'XML)

    Grazie davvero, decisamente un bel contributo!
    per favore NIENTE PVT TECNICI da sconosciuti

  4. #24
    Salve ragazzi, purtroppo per quanto sia utile la pillola una delle 2 classi di Fabio ( che ringrazio per alcuni spunti ) mi dava dei problemi con lo scope di una variabile, in pratica se oltre alla PHP_Serialize usavo altre classi / oggetti javascript, questi non si ritrovavano più alcune variabili o meglio se le ritrovavano sovrascritte.

    Invece di risolvere ho riscritto da zero un Oggetto javascript che serializza e deserializza compatibilmente con serialize ed unserialize di PHP.

    La classe è abbastanza anonima, nel senso che di quelle poche che ho visto in JS (solo quella di Fabio ... assurdo !) o in ActionScript (quella di Sephiroth) lavora in un modo completamente differente ... risultato ? prestazioni accettabili e soprattutto, dai tests che ho fatto, senza margine di errore.

    Attendo vostre smentite (debug ) se potete, poichè ci tengo parecchio ad avere una classe JS fatta bene e stabile per poter interagire con ajax ... sarebbe l'elemento risolutore per interazioni JS/PHP

    Grazie a tutti per la cordiale attenzione, ecovi il link:
    http://www.devpro.it/javascript_id_102.html

    Leggete bene i commenti prima di dire non va, alcune cose sono per forza di cose non possibili




    P.S. JSON lavora lato server, ergo non sposta il carico sul client, scopo della mia serialize, devono sudare questi clients
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #25
    maro' calmi uno alla volta

    volevo solo dire che ho fatto un update poiche' dava problemi in unserialized con dei nested array

    http://www.devpro.it/code/102.html

    ora sembra ok, grazie per il debug, se me lo fate



    ah ... aggiungo esempio
    codice:
    <?php
    // example nested array
    $myarray = array(
    	true,
    	123,
    	array(
    		'nested',
    		array(
    			1,
    			'test'=>false
    		)
    	),
    	'other'=>'value'
    );
    // array serializzation
    $serialized = serialize($myarray);
    ?>
    <script type="text/javascript" src="PHP_Serializer.js"></script>
    <script type="text/javascript">
    // function to dump an object
    function showObject(obj, level) {
    	var l = '';
    	var tmp = '';
    	for(var a = 0; a < level; a++)
    		l += '[_]';
    	for(var a in obj) {
    		var type = typeof(obj[a]);
    		if(type == 'object')
    			tmp += showObject(obj[a], (level + 1));
    		else
    			tmp += l + ' key: ' + a + ' = value: ' +
    			obj[a] + ' < ' + type + '\n';
    	}
    	return tmp;
    }
    // new PHP_Serializer variable
    var php = new PHP_Serializer();
    // dinamyc JS var creation
    var myJSvar = php.unserialize("<?php echo str_replace('"', '\\"', $serialized); ?>");
    // look at dump :-)
    alert(showObject(myJSvar, 0));
    </script>
    la parte in bold del cambio slash con l' addslash e' abbastanza importante per evitare che la stringa venga male interpretata in javascript quindi quella, per questo tipo di interazione, e' la maniera giusta di passare il serializzato ed assegnarlo tra "" alla variabile js
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #26
    Originariamente inviato da andr3a
    Salve ragazzi, purtroppo per quanto sia utile la pillola una delle 2 classi di Fabio ( che ringrazio per alcuni spunti ) mi dava dei problemi con lo scope di una variabile, in pratica se oltre alla PHP_Serialize usavo altre classi / oggetti javascript, questi non si ritrovavano più alcune variabili o meglio se le ritrovavano sovrascritte.
    Ciao Andrea,

    ti avevo risposto in privato perchè non mi ero accorto dell'intervento qui.

    La classe è in beta e non l'ho più presa in mano, ma non mi sono accorto di questi problemi, mi faresti un esempio di ogetto che non viene serializzato correttamente?
    Così nel caso correggo.

    Ho visto il tuo codice e mi sembra ok, se funziona è sempre ok

    L'unica cosa: io ho evitato quanto più possibile di utilizzare switch o if...else per mantenere lo script più efficiente possibile (si tratta di quisquiglie comunque) se riesci ad adattare il tuo nello stesso modo secondo me sarebbe un tocco in più.
    Le "funzioni variabili" non sono una prerogativa di PHP esistono anche in Javascript e quando possibile è utile usarle (in questi casi si parla di Lazy Programming)
    per favore NIENTE PVT TECNICI da sconosciuti

  7. #27
    Originariamente inviato da Fabio Heller
    La classe è in beta e non l'ho più presa in mano, ma non mi sono accorto di questi problemi, mi faresti un esempio di ogetto che non viene serializzato correttamente?
    mica facile, cmq dava errori la console e lo script si bolccava, abbinando la mia LoadVars alla tua Serialize


    Originariamente inviato da Fabio Heller
    Ho visto il tuo codice e mi sembra ok, se funziona è sempre ok
    cacchio ... avevo fatto tutti i tests possibili e immaginabili poi nell' ottimizzare mi sono perso un : per stada, ora ho riaggiornato questa che dovrebbe essere l'utima versione o perlomeno quella stabile.


    Originariamente inviato da Fabio Heller
    L'unica cosa: io ho evitato quanto più possibile di utilizzare switch o if...else per mantenere lo script più efficiente possibile (si tratta di quisquiglie comunque) se riesci ad adattare il tuo nello stesso modo secondo me sarebbe un tocco in più.
    a dire il vero un if me l'hai dato come spunto per i numeri, l'indexOf per il tipo integer o diuble in serializzazione ... per gli altri .. beh, sono d'obbligo ma uno switch su un carattere non ha mai rallentato niente.. o meglio , non e' li il collo di bottiglia.


    Originariamente inviato da Fabio Heller
    Le "funzioni variabili" non sono una prerogativa di PHP esistono anche in Javascript e quando possibile è utile usarle (in questi casi si parla di Lazy Programming)
    non ho capito niente di questa frase, me la spiegheresti con parole per comuni mortali ?



    per concludere, ecco un bench che verifica in parallelo su una sola pagina PHP e JavaScript in serializzazione e deserializzazione, utile per debug o test sulle prestazioni.

    La cosa deludente e' che FireFox in deserializzazione è MOLTO piu' lento di IE o Opera, la cosa sorprendente è che la serializzazione è molto veloce mentre bisognerebbe ottimizzare la deserializzazione, poiche' su 500 records o piu' comincia a farsi sentire

    Per ora mi interessa una versione ufficiosa e stabile, poi alle prestazioni pensero' dopo anche se ho contato le variabili utili ... non so piu' dove ottimizzare.

    Anche mettendo le funzioni esterne il problema non cambia, ovvero non e' una questione di OO o di Function piuttosto che Object, e' proprio che la stringa in pasto alla deserializzazione pesa e per quanto la riduca di volta in volta non riesco a migliorare, sono ben accetti consigli.

    codice:
    <?php
    $jsbench = 'var myar = new Array();';
    $myarray = array();
    for($a = 0; $a < 5; $a++) {
    	$jsbench .= "myar.push(new Array(".($a+1).", 'C{$a}', 'dE{$a}', 'AbcD{$a}'));";
    	array_push($myarray, array($a+1, 'C'.$a, 'dE'.$a, 'AbcD'.$a));
    }
    ?>
    <script type="text/javascript" src="PHP_Serializer.js"></script>
    <script type="text/javascript">
    // function to dump an object / array
    function showObject(obj, level) {
    	var l = '';
    	var tmp = '';
    	for(var a = 0; a < level; a++)
    		l += '[_]';
    	for(var a in obj) {
    		var type = typeof(obj[a]);
    		if(type == 'object')
    			tmp += showObject(obj[a], (level + 1));
    		else
    			tmp += l + ' [' + typeof(a) + '] ' + a + ' = value: ' +
    			obj[a] + ' < ' + type + '\n';
    	}
    	return tmp;
    }
    
    // new PHP_Serializer
    var php = new PHP_Serializer();
    
    // array with some nested arrays
    <?php echo $jsbench; ?>
    <?php echo 'var phpserialized = "'.str_replace('"', '\"', serialize($myarray)).'";'; ?>
    	
    // start serializzation time
    var time = new Date();
    var start = time.getTime();
    
    // array serializzation
    var myar_ser = php.serialize(myar);
    
    // elapsed serializzation time
    time = new Date();
    var end1 = (time.getTime() - start);
    
    // start deserializzation time
    time = new Date();
    start = time.getTime();
    
    // deserializzation
    var myar2 = php.unserialize(myar_ser);
    
    // elapsed deserializzation time
    time = new Date();
    var end2 = (time.getTime() - start);
    
    // write bench result
    var bench = 'Time information\n';
    bench += 'Serializzation: ' + (end1/1000) + ' secondi\n';
    bench += 'Deserializzation: ' + (end2/1000) + ' secondi\n';
    bench += '\nArray information\n';
    bench += 'Native   Array : ' + myar.toString();
    bench += '\nModified Array : ' + myar2.toString();
    bench += '\n\nJavaScript Array serialized rappresentation\n';
    bench += myar_ser;
    bench += '\n\nPHP serialized rappresentation\n';
    bench += phpserialized;
    bench += '\n\nAre JS and PHP serialized strings equal ?\n';
    bench += (phpserialized == myar_ser) ? 'Yes' : 'No';
    bench += '\n\nDump information\n';
    bench += '-Native   Array : \n'
    bench += showObject(myar);
    bench += '\n-Modified Array : \n'
    bench += showObject(myar2);
    document.write('<pre>' + bench + '</pre>');
    </script>
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #28
    FABIO, attenzione !!!
    ho trovato il modo di farti capire dove i tuoi files fanno casini.
    ( volevo fare un paio di tests per vedere le prestazioni)

    Guarda il codice qui sopra, copia e incolla ed aggiungi questo prima o dopo il punto dove io ho messo l' src per la mia serializer


    <script type="text/javascript" src="PHPserializer.js"></script>
    <script type="text/javascript" src="PHPunserializer.js"></script>


    ora lancia la pagina .... vedi che fa un casino pazzesco ?
    c'e' qualcosa che non va con gli scope, "distruggono le funzioni" ... mai successo prima VVoVe:



    [editato]
    però caxxo quanto sono più veloci le tue due classi, e dire che ho usato 1/4 di codice VVoVe:


    complimenti, perchè non ci mettiamo insieme ad ottimizzare la mia ?

    ... mo vedo cosa riesco a fare sulla mia ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #29
    Originariamente inviato da andr3a

    [editato]
    però caxxo quanto sono più veloci le tue due classi, e dire che ho usato 1/4 di codice VVoVe:


    complimenti, perchè non ci mettiamo insieme ad ottimizzare la mia ?

    ... mo vedo cosa riesco a fare sulla mia ...
    Adesso provo a capire da cosa dipendono i casini

    Per quanto riguada la velocità, immagino sia proprio il lazy programming.

    Anzichè fare uno switch o un if ogni volta per capire come tradurre a php a js o vicerversa un dato tipo, limito al minimo indispensabile le condizioni.


    Es.

    nel caso della trasormazione da JS a PHP
    la capacità di serializzarsi viene aggiunta agli oggetti Javascript aggiungendo loro un metodo dinamicamente.

    Cioè ogni oggetto javascript ha il metodo toPHP

    Invece nel caso della deserializzazione

    ogni lettera che viene incontrata durante la suddivisione della stringa fa scattare automaticamente il metodo giusto.

    Se è un oggetto "o" fa scattare da sola il metodo PHPunserializer.prototype.O
    per favore NIENTE PVT TECNICI da sconosciuti

  10. #30
    Originariamente inviato da Fabio Heller
    Per quanto riguada la velocità, immagino sia proprio il lazy programming.
    No Fabio ... ho trovato qual'e' il collo di bottiglia ... questa tua linea
    if(what[b].constructor != Function && b != '__class')
    al posto della mia try{} chatch(e) per verificare se la var e' un afunzione mi dimezza i tempi di serializzazione ... sei un grande, grazie, verrai inserito tra i credits, ora

    appena ultimo uppo il tutto e posto il link, ancora grazie ... quella linea è veramente formidabile


    P.S. la prototype la odio poiche' aggiunge funzioni facilmente sovrascrivibili, ergo non m'e' piaciuto come metodo OO per ECMA ... che sia AS o JS ... mi fa schifo


    detto questo, dubito che lo switch sul tipo di dato, che è un iformazione immediatamente reperibile dal core JS (il tipo di una variabile) faccia calare chissa' quanto, in compenso mi permette di usare 1/3 del tuo codice, quindi resta li ... almeno in serializzazione, dove i empi ora sono identici ad i tuoi
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.