Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 15 su 15
  1. #11
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da IroN@xiD
    Si!
    [...]
    Insomma... un altro mondo!!
    sì, tutto questo l'avevo immaginato, ma io parlo proprio di sintassi, su flash come definisci quel tipo di oggetto?

    insomma con loadvars fai
    codice:
    var myLoadVars = new LoadVars();
    myLoadVars.onLoad = function(success){
    //azioni al caricamento dei dati
    }
    myLoadVars.load("miofile.php");
    con WSDL come funziona?

  2. #12
    Beh con WSDL/SOAP in flash è molto molto semplice. Ora ti faccio qualche esempio.
    Il lato server è un po' più complesso. Soprattutto bisogna aver capito bene il meccanismo del WSDL/SOAP. Per farlo basta leggersi le guide sul w3c.

    LATO SERVER

    Facciamo un esempio usando nusoap/php lato server.

    Creiamo libri.php

    codice:
    <?php
    require_once('nusoap.php'); //includiamo la libreria nusoap
                                //la si trova con una ricerca su google
    $NAMESPACE = 'http://tgiulio.homeip.net/soap/libri'; //decidiamo il namespace (vedi w3c->XML)
    $server = new soap_server; //creiamo un oggetto/server nusoap
    $server->debug_flag=false;
    $server->configureWSDL('Game', $NAMESPACE); //configuriamo WSDL
    $server->wsdl->schemaTargetNamespace = $NAMESPACE;
    
    /*====== DICHIARIAMO I TIPI WSDL =======
      Possono essere semplici, complessi, array, booleani, date ecc. (vedi XML/SOAP/WSDL e nusoap)
      Questo è il cuore del WSDL. Si specifica come andranno scambiati i dati.
      Per esempio creiamo un array di libri.
    */
    
    //DEFINIAMO IL MODELLO DI LIBRO
    $server->wsdl->addComplexType(
        'libro',
        'complexType',
        'struct',
        'all',
        '',
        array(
            'autore' => array('name'=>'autore','type'=>'xsd:string'),
            'titolo' => array('name'=>'titolo','type'=>'xsd:string'),
            'pagine' => array('name'=>'pagine','type'=>'xsd:int')
        )
    );
    
    //DEFINIAMO L'ARRAY DI LIBRI
    $server->wsdl->addComplexType(
        'Libri',
        'complexType',
        'array',
        '',
        'SOAP-ENC:Array',
        array(),
        array(   array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Libri[]')
        ),
        'tns:Libro'
    );
    
    /* ========== REGISTRIAMO LE PROCEDURE/METODI WSDL =======
       In sintesi decidiamo quali servizi vogliamo mettere a 
    disposizione, praticamente le funzioni. Quali parametri 
    richiedono e cosa ritornano.
    */
    
    //questa funzione che registriamo non richiede parametri
    //e restituisce una lista di libri 
    $server->register(
        'listaLibri',
        array(), //questo array decide i parametri che il metodo richiede
                 //ma adesso non ne abbiamo bisogno
        array('return'=>'tns:Libri'), //definiamo che il metodo restituisce la lista di libri
        $NAMESPACE
    );
    
    
    /* ========= LA FUNZIONE listaLibri ========
       Con WSDL abbiamo:
       1 - definito dei tipi (libro e libri)
       2 - definito dei metodi (listaLibri)
       Ora bisogna decidere come ritornare la lista di libri.
       Ovviamente bisogna rispettare il formato stabilito quando abbiamo definito i tipi.
    */
    
    function listaLibri() {
      //non mi metto a fare cose strane... creo una risposta fissa
      //ecco due libri
      $libro1=Array('nome'=>'Divina commedia','autore'=>'Dante','pagine'=>3333);
      $libro2=Array('nome'=>'Al di la del bene e del male','autore'=>'Nietzsche','pagine'=>222);
      //la funzione listaLibri ritorna una lista di libri
      //inutile dire che quello che ritorna dev'essere coerente
      //con quello che noi abbiamo specificato prima ;)
      return Array($libro1,$libro2);
    }
    
    //ora chiudiamo la faccenda con il codice di nusoap che intercetta le richieste
    
    $HTTP_RAW_POST_DATA = isset($GLOBALS['HTTP_RAW_POST_DATA'])
                            ? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
    $server->service($HTTP_RAW_POST_DATA);
    ?>
    A questo punto se salvi la pagina e metti a disposizione la libreria nusoap puoi anche aprire la pagina con il browser e troverai un introduzione ai metodi messi a disposizione con le loro caratteristiche. A questi metodi faremo ora riferimento con flash allo scopo di ricevere la lista di libri

    LATO CLIENT (FLASH)

    Ora ci collegheremo con flash al nostro servizioweb supponendo di averlo messo in http://localhost/libri.php.

    Userò solo AS ma è possibile usare WSDL/SOAP anche tramite l'interfaccia (anche se finisce per essere più scomodo secondo me).

    codice:
    import mx.services.WebService; //importiamo la classe flash
                                   //il componente webserviceconnector dev'essere nella libreria
    
    //creiamo un webservice e carichiamo il suo WSDL
    libri_ws = new WebService("http://localhost/libri.php?wsdl"); 
    //il ?wsdl serve per nusoap per resituire direttamente l'XML del WSDL 
    //(provate ad aprirlo con il browser)
    //a questo punto flash contatta libri.php e richiede la descrizione dei tipi e delle procedure
    //esistono due eventi uno per gestire gli errori in fase di caricamento del wsdl
    libri_ws.onFault = function(fault){
      if(fault.faultCode!=undefined) str="libri_ws [ERROR]["+fault.faultCode+"]"+fault.faultstring;
      else str="libri_ws [ERROR]:"+fault.faultstring;
      trace(str); //se qualcosa va male capiremo il perchè
    };
    //l'altro per capire che tutto è andato bene
    libri_ws.onLoad = function(WSDLDocument){
      //abbiamo caricato correttamente il wsdl e a questo punto possiamo
      //usare le procedure fornite dal servizio.
      //libri.php offre solo listaLibri ma potrebbe offrire un centinaio di altre procedure ;)
      //effettuiamo una chiamata alla procedura listaLibri :)
      listaLibriCall = _root.libri_ws.listaLibri();
      //anche listaLibriCall ha i suoi eventi
      //vediamo la gestione errori
      listaLibriCall.onFault = function() {
        //qualcosa è andato storto
        //leggi la guida di flash per capire meglio la gestione
        //errori in questa fase
      }
      //ed ora vediamo cosa succede quando riceviamo la lista
      listaLibriCall.onResult = function(result) {
        //mitico!!! abbiamo la lista!!!
        libro1=result[0];
        libro2=result[1];
        trace(libro1['nome']); //stamperà Divina commedia!! :)
      }
    }
    Ecco fatto
    E' stata dura ma ce l'ho fatta!!

    Sottolineo che esistono sistemi più semplici per usare il webconnector ma dato che ero in ballo ho usato come esempio il migliore

    Ciao!!!
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  3. #13
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da IroN@xiD
    [...]
    molto interessante questo esempio, grazie per il chiarimento

    in ogni caso comunque da quel che ho capito, vista la "complicatezza" della costruzione del tutto, per cose piccole tipo la gestione di 5/600 prodotti (piccole neanche tanto) o la gestione di news, conviene comunque usare un metodo più semplice

  4. #14
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da and80
    [...]conviene comunque usare un metodo più semplice
    mi riferisco alle classi native LoadVars() e XML()

  5. #15
    beh.. onestamente non lo trovo così difficile. Certo, i prerequisiti sono di più e più complessi, ma una volta acquisiti diventa tutto semplice.

    In realtà, l'unica differenza rilevante che rende loadVars più semplice da utilizzare sta nel fatto che loadVars non richiede la conoscenza di un linguaggio lato server visto che basta un qualsiasi file di testo.

    Eliminando dal mio esempio la parte lato server e la gestione degli errori (su flash). Utilizzare un servizio WSDL si racchiude in queste righe

    codice:
    import mx.services.WebService; 
    libri_ws = new WebService("http://localhost/libri.php?wsdl");
    libri_ws.onLoad = function(WSDLDocument){
      listaLibriCall = _root.libri_ws.listaLibri();
      listaLibriCall.onResult = function(result) {
        trace(libro1['nome']); //stamperà Divina commedia!! 
      }
    }
    contro quelle che seguono che servirebbero per loadvars. Va sottolineato però che nel caso di loadVars i dati sono ancora tutti da estrapolare

    codice:
    var myLoadVars = new LoadVars();
    myLoadVars.onLoad = function(success){
    //azioni al caricamento dei dati
    }
    myLoadVars.load("miofile.php");
    Tuttavia va sottolineato anche che:
    a- esistono webservice gratuiti già pronti e forniti da alcuni server per le più svariate questioni
    b- il mio esempio si basava sull'utilizzo pieno di AS mentre è possibile fare quasi tutto da interfaccia (se hai tempo dai un occhiata, basta che trascini il componente wsconnector sullo stage e inserisci l'url)
    c- la parte lato server sembra complessa ma non lo è assolutamente perchè molto del codice basta copiancollarlo il più delle volte, per esempio per la creazione di nuovi tipi o procedure

    Direi che loadVars è un metodo semplice (troppo semplice). E' adatto e utile nei casi in cui serve ottenere qualche semplice variabile statica da un file di testo. Per tutto il resto è preferibile XML, e nel caso di contenuti dinamici la via migliore è senza dubbio WSDL/SOAP

    Provare per credere!!

    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

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.