Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Json

  1. #1
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308

    Json

    Ciao a tutti,
    la comprensione di questa funzione

    Codice PHP:
    function req(methoddatacallback)
    {
      var 
    xmlhttp = new XMLHttpRequest();
      
      
    xmlhttp.onreadystatechange = function()
      {
        if(
    xmlhttp.readyState == 4)
          
    callback(xmlhttp.responseText.parseJSON());
      }
      
      
    xmlhttp.open("POST""server.php?action=" methodtrue);
      
    xmlhttp.send((data == null "" data.toJSONString()));

    del file cart.js dell'articolo su JSON (http://php.html.it/articoli/leggi/20...-json-con-php/) mi sta dando del filo da torcere.
    Ho chiaro la gestione degli Event Handlers e della funzione anonima, ma sono bloccato a questa riga

    Codice PHP:
    callback(xmlhttp.responseText.parseJSON()); 
    Posso supporre che callback non sia una funzione ma una variabile che viene sostituita dal terzo parametro della funzione req() ( è cosi'? ) e che a quel punto diventi quella funzione.

    Qualcuno potrebbe spiegarmi la funzionalità di tutta quella riga di codice?
    Grazie

  2. #2
    codice:
    callback	// funzione da richiamare 
    		// a caricamento dati effetuato
    (
    	xmlhttp.responseText.	// la stringa restituita dal server
    	parseJSON()		// la prototype di stringa
    				// aggiunta in automatico
    				// dal file json.js
    				// che ovviamente deve essere incluso
    );
    
    // in poche parole ichiama la funzione
    // inviata come terzo parametro
    // la quale riceverà come unico argomento
    // l'oggetto JavaScript risultante
    // dalla stringa JSON generata dal server
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Grazie Andrea per la veloce risposta,
    innanzitutto voglio complimentarmi con te per gli altri tuoi post e pillole sono spiegati davvero bene e fatti come si deve ( ho letto quello sul JavaScript ad oggetti e quello dei 33+3 buoni motivi.. ).

    Ritornando al punto del discorso, scusami, ma ho ancora qualche difficoltà a comprendere... Vorrei provare a fare un esempio pratico.

    Nel file cart.js, una delle funzioni aggiunge del contenuto al carrello:

    Codice PHP:
    function addProduct(id)
    {
      
    req("addProduct", { product_id id }, function(cart)
      {
        
    fillCart(cart);
      });

    Per quello che ho capito, quindi la funzione di callback in questo caso sarà

    Codice PHP:
    function(cart)
      {
        
    fillCart(cart);
      } 
    che avrà come parametro (cart) la risultante di

    Codice PHP:
    xmlhttp.responseText.parseJSON() 

    Ho capito bene?
    Ti ringrazio

  4. #4
    la callback è proprio la funzione da richiamare ... tipo
    codice:
    function req(a, b, callback){callback([a, b])};
    req("valore a", "valore b", alert);
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Grazie,
    adesso ho più chiaro il concetto e posso andare avanti con la comprensione.
    Facciamo un altro esempio molto pratico, sempre riferendoci all'articolo JSON.

    Il mio carrello attuale è di :

    n° 1 X Penna Stilografica ( 1.5 € cad. id: 0 )
    n° 2 X Quaderno a righe ( 2.5 € cad. id : 1 )

    Clicco sul tasto per aggiungere una ulteriore Penna Stilografica.
    A questo punto:

    1) Il client richiamerà la funzione "addProduct" (cart.js) portandosi dietro l'ID del prodotto.

    2) La funzione "addProduct" richiamerà la funzione "req" (cart.js) con i seguenti parametri

    method = addProduct

    data = { product_id : 0 }

    callback = function(cart) {
    fillCart(cart);
    }

    dove cart = xmlhttp.responseText.parseJSON()


    ResponseText è un metodo dell'oggetto XMLhttpRequest ( quindi di AJAX ), che in base a quanto descritto sull'articolo su AJAX ( http://javascript.html.it/guide/lezi...i-parametri-i/ ) riceve i dati restituiti dal server ad operazione ultimata.

    ParseJSON() è un metodo della libreria JSON che parsa un testo JSON per produrre un oggetto o un array.

    Il mio dubbio quindi è, cosa otterrò come risultato visibile ad occhio umano dalla stringa xmlhttp.responseText.parseJSON() tenendo conto dei dati del mio carrello elencati?

    Grazie

  6. #6
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ok, ho fatto una prova e sono riuscito a rispondermi da solo.
    Prima di tutto lo status del server prima di diventare "4", quindi di inviarci dei dati, li deve ricevere. Ed infatti vengono eseguiti questi comandi, appartenenti alla funzione req:

    Codice PHP:
      xmlhttp.open("POST""server.php?action=" methodtrue);
      
    xmlhttp.send((data == null "" data.toJSONString())); 
    questi richiamano le funzioni PHP che modificheranno il nostro carrello ( in questo caso un file di testo ). A questo punto lo status del server diverrà "4", e per vedere a cosa corrisponde la stringa

    Codice PHP:
    xmlhttp.responseText.parseJSON() 
    ho provato a modificarla, eliminando il metodo parseJSON() ed inserendola come parametro di alert() ( ho temporaneamente rimosso callback ). Ne è venuta fuori una stringa del genere ( come spiegato nell'articolo JSON ):

    [{"product":"Quaderno a righe","quantity":2,"price":2.5},{"product":"Penna Stilografica","quantity":1,"price":1.5}]

    Non omettendo il metodo parseJSON() alert ci dirà che l'argomento è un oggetto.
    Ho quindi provato a modificare ancora il codice in questa maniera:

    Codice PHP:
        if(xmlhttp.readyState == 4){
          
    cart xmlhttp.responseText.parseJSON();
          
    alert(cart[0].product+": "+cart[0].quantity);
        } 
    L'alert visualizzarà cosi' il mio primo prodotto e la sua quantità relativa.
    Scusate se ho scritto cosi' tanto, questo mio metodo di ragionamento/distruzione del codice mi sta aiutando a capirci di più e pensavo potesse essere utile anche a qualcun altro in futuro.
    Ritornerò a disturbarvi presto.
    Grazie

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.