• User Newbie

    Problema con firefox e sendAndLoad()

    Salve a tutti, sono nuovo su questo forum, e spero di non aver sbagliato sezione per esporre il mio problema 😄

    Premesso che sono ormai giorni che cerco per il web soluzioni concrete, ma senza alcun risultato, vi spiego in cosa sono incappato nell'ultimazione del mio sito web:

    Ho necessità di trasferire variabili da Flash ad una funzione Server-Side Php che le scrive in un file sul server.
    Nel farlo utilizzo la funzione "sendAndLoad()", la quale lavora perfettamente sui vari browser, se non fosse per Firefox, dove infatti, non capisco per quale motivo, le variabili vengono inviate solo quando, udite udite, viene aperto un nuovo tab o una nuova finesta nel browser che visualizza l'swf!

    Insomma sarebbe un problema gravissimo per l'utilizzatore, che per visualizzare correttamente il mio sito, dovrebbe continuamente aprire nuovi Tab, un disastro!

    Spero possiate aiutarmi

    Dettagli aggiuntivi: Questa situazione si ha solo quando il filmato in questione, è visualizzato da più client diversi nello stesso momento, altro fattore molto insolito...Help!


  • Super User

    Ciao Race sr, benvenuto sul forum GT, in effetti non è facile dare una risposta al tuo problema potresti postare il codice?


  • User Newbie

    Innanzitutto grazie per avermi risposto in tempi così brevi.

    Ti posto il codice Actionscript:

    
    var fv_send = new LoadVars();
    var fv_recive = new LoadVars();
    
    // imposto le variabili da inviare al server
    fv_send.vars =     "variabili da inviare";
    // imposto la funzione onLoad per gestire lo scambio di dati asincrono
    fv_recive.onLoad = DataLoaded;
    // invio variabili e carico le relative risposte in un altro LoadVars
    fv_send.fv_sendAndLoad ("dominio/test.php?nocache=" + Math.round(Math.random() * 99999), fv_recive, "POST");
    
    function DataLoaded (success)
    {
    if (success)
        {
        trace(this.state); // variabile di risposta caricata da Php
        }
    else trace("Data NOT Loaded");
    }
    
    

    E il relativo php:

    
    <?php
    $vars = stripslashes($_POST['vars']);
    
    
    if ($vars != null)
        {
        // scrivo un file testuale contenente le variabili
        writefile("vars.txt" , $vars , "w");              
    
        echo "&state=ok"; // variabile di risposta a flash
        exit; // fine dello script
        }
    
    
    function writefile($filename,$data,$mode)  
        {
        $myfile = fopen($filename,$mode);
        fwrite($myfile,$data);
        fclose($myfile);
        }
    ?>
    
    

    Altro dubbio: stavo iniziando a pensare che forse il problema risiede nel fatto che i test vengono eseguiti con client che hanno lo stesso IP address e siccome uso un server apache che se non erro ho lasciato in configurazione standard, tali connessioni multiple da stesso IP potrebbero essere bloccate, è plausibile una spiegazione del genere?


  • User Attivo

    Non capisco a cosa serve quel numero casuale col math.random?

    Chiunque potrebbe interpretare la cosa come un aggiunta all'url ma che senso ha se il metodo post non memorizza?
    Oppure un numero casuale associato ad un messaggio bò...

    Intanto ho modificato un po entrambi gli script perche contenevano errori il primo
    fv_send.fv_sendAndLoadfv_ e il secondo la funzione contiene dei parametri.
    Tali parametri non sono definiti
    function writefile($filename,$data,$mode)

    $filename,$data,$mode ed io di certo non posso indovinare..

    Comunque ho fatto 2 esempi.

    Questo col metodo post più o meno simile al tuo (anche se non ha molto senso)
    [...]

    E quest'altro col metodo send e get che ha più senso se guardi la barra dell'indirizzo il numero casuale viene aggiunto al messaggio
    [...]

    Grazie all'attributo _self rimane nella stessa finestra
    senderLoad.send("mess2-get.php?banana="+ggg, "_self", "get");

    La variabile ggg non è altro che il math.random che hai messo tu
    ggg=Math.round(Math.random() * 99999);

    Per accorciare la stringa l'ho messo a parte.

    Ho dovuto usare il sistema send e get per assicurmi che le variabili venissero ricevute sia sulla barra dell'indirizzo che stampate sulla pagina e scritte su file.
    Ovviamente in questo modo non può esserci messaggio di ritorno.


  • User Attivo

    Purtroppo i link mi sono stati cancellati quindi metto lo script che ho usato per il metodo POST con ricezione variabili testato e funzionante.

    
    --------------------php
    <?php
    if(isset($_POST['theName'])){
    $theName=htmlspecialchars($_POST['theName']);
    $banana=htmlspecialchars($_POST['banana']);
    
    $var=fopen("file111.txt","w+");
    fwrite($var,"$theName");
    fclose($var);
    
    echo "&state=positivo&banana=positivo";
    }
    ?>
    
    <br>
    <iframe name="banana" src="file111.txt" width=500 height=200></iframe>
    <a target="banana" href="file111.txt">aggiorna</a><br>
    <a href="mess2.php">ricarica</a><br><br>
    
    <embed src="loadvars-invio-e-riceve-risposta.swf" width=550 height=400>
    
    ------------------------------actionscript-------in Flash---------------
    state.text=" - ";
    banana.text=" - ";
    verifica="";
    function reset(){
        state.text=" - ";
        banana.text=" - ";
        theName.text="";
        verifica="";
        clearInterval(timer);
    }
    
    ggg=Math.round(Math.random() * 99999);
    
    var senderLoad: LoadVars = new LoadVars();
    var receiveLoad: LoadVars = new LoadVars();
    
    sender.onRelease = function() {
    senderLoad.theName = theName.text;
    senderLoad.sendAndLoad("mess2.php?banana="+ggg, receiveLoad, "POST");
    }
    
    receiveLoad.onLoad = function (ok) {
    if(ok) {
        timer=setInterval(reset, 5000);
    verifica="ok";
    trace(this.state);
    state.text=this.state;
    banana.text=this.banana;
    }else {
    verifica="ko";
        timer=setInterval(reset, 5000);
    }
    }
    
    ```Nello stage 2 caselle dinamiche con nome istanza:
    state e banana. Una con nome var: verifica
    
    Inoltre una casella dinamica chiamatatheName
    e un pulsante con nome istanza: sender
    
    Non appena viene mandato il messaggio (theName)
    dopo 5 secondi i campi vengono cancellati.
    
    Lo script va messo tutto in un fotogramma.
    
    
    ----------col metodo get------
    
    Con questo metodo il numero casuale viene aggiunto all'url.
    
    

    <?php
    echo "&state=positivo&banana=$banana";

    //if(isset($_GET['theName'])){
    $theName=htmlspecialchars($_GET['theName']);
    $banana=htmlspecialchars($_GET['banana']);

    $var=fopen("file111-get.txt","w+");
    fwrite($var,"$theName $banana");
    fclose($var);

    //echo "&state=positivo&banana=$banana ";
    //}
    ?>

    <br>
    <iframe name="bananas" src="file111-get.txt" width=500 height=200></iframe>
    <a target="bananas" href="file111-get.txt">aggiorna</a><br>
    <a href="mess2-get.php">ricarica</a><br><br>

    <embed src="loadvars-invio-e-riceve-risposta-get.swf" width=550 height=200>

    ----------------ACTIONSCRIPT in FLASH---------------------------

    state.text=" - ";
    banana.text=" - ";
    ggg=Math.round(Math.random() * 99999);

    var senderLoad: LoadVars = new LoadVars();
    var receiveLoad: LoadVars = new LoadVars();

    sender.onRelease = function() {
    senderLoad.theName = theName.text;

    senderLoad.send("mess2-get.php?banana="+ggg, "_self", "get");
    }

    /*
    receiveLoad.onLoad = function (ok) {
    if(ok) {
    verifica="ok";
    state.text=this.state;
    banana.text=this.banana;
    }else {
    verifica="ko";
    }
    }
    */


  • User Newbie

    Ciao, ti ringrazio per aver postato tanto codice, ma non credo che tu abbia compreso davvero il mio problema. In ogni caso, l'ho risolto da me, giocando andando a cercare proprio nella configurazione del mio server.

    Infatti come sospettavo, esso non era stato organizzato in modo tale da gestire più connessioni nella maniera più ortodossa.
    Adesso quindi funziona come dovrebbe e senza intoppi, ma vi ringrazio nuovamente per il tempo che avete perso su questo mio quesito.

    Race_sr


  • Super User

    Mi fa piacere che tu abbia risolto, ho chiesto io al mio amico Max di dare un occhiata al tuo problema perchè lui di php sicuramente ci capisce molto più di me, e infatti non si è risparmiato nell' effettuare dei test, ciao alla prossima.