Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194

    variabili globali dalla risposta Ajax

    Ciao a tutti, spero di non tediarvi troppo, mi avete dato spesso grandi spunti ed anche il solo scrivere a volte mi aiuta a ragionare sul problema. Premetto che ho cercato parecchio in Internet ma con poco successo e a volte non so neppure cosa cercare.

    Ho parecchie variabili restituite da una chiamata Ajax che utilizzo diverse volte nella pagina applicandoci delle operazioni matematiche. Il problema è che non riesco ad usare queste variabili globalmente ma solo all'interno della funzione. Se non ho capito male il fatto che la chiamata sia asincrona fa si di ottenere dei dati i quali però non possono diffondersi nella pagina fino ad un refresh che vada quindi a rileggerli.
    La soluzione che adotto è questa:

    codice:
    function Attributi(){
     var id_eroe = '<?php echo $_GET['id_eroe'];?>';
     
     $.ajax({
     type: "POST",
     url: "db/rpg_select.php",
     data: "id_eroe="+id_eroe,
     dataType: "html",
     tryCount : 0,
        retryLimit : 3,
     success: function(data){
       MyData(data);
       return data;
     },
      error: function(xhr, textStatus, errorThrown ) {
            if (textStatus == 'timeout') {
                this.tryCount++;
                if (this.tryCount <= this.retryLimit) {
                    $.ajax(this);
                    return;
                }            
                return;
            }
            if (xhr.status == 500) {
               
            } else {
                alert('Connessione fallita');
            }
        }
    function MyData(data){
      var data = jQuery.parseJSON(data);
     //le mie variabili ad esempio
    nome=(data.nome);
    $('#nome').val(nome);
    }
    });
    }
    e successivamente richiamando la funzione MyData uso i valori restituiti.

    Il problema è che questi dati li uso più volte nella pagina e più volte devo rifare la chiamata per riprenderli una volta aggiornato il database ad esempio:

    codice:
    function MyData(data){
     var data = jQuery.parseJSON(data);
      nome=(data.nome);
      if(condizione > valore){
        nome='';
      }
     $.ajax({
     type: "POST",
     url: "db/reset.php",
     data: "id_eroe="+id_eroe+"&reset=nome",
     dataType: "html",
     success: function(){
       Attributi(); //richiamo la funzione per aggiornare la schermata con i nuovi valori
      }
     });
    }
    In questa maniera però non funziona. Se inserisco il primo richiamo alla funzione MyData all'interno di Attributi il codice non va, mentre se lo tengo fuori allora funziona ma non so come aggiornare a schermo i mie campi all'interno della funzione.
    L'alternativa è creare due funzioni con due chiamate ma non so ancora quante volte incrocerò questi dati (evitando il refresh della pagina) e sto quindi cercando la soluzione più compatta.
    Spero di essermi spiegato.
    Grazie mille

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194

    mezza risoluzione

    Alla fine ho optato per incorporare tutte le operazioni che usano quelle variabili nella stessa funzione.
    Mi sarebbe però di grande aiuto se ci potesse essere un modo per rendere globali le mie variabili o comunque fare qualcosa del genere

    prima parte, script che parte al caricamento:
    1)Chiamata Ajax - 2)Ricevo i dati - 3)Inserisco i dati nei campi
    seconda parte, script che si avvia con un evento:
    1) Chiamata Ajax 2) Ricevo i dati e gli elaboro in vario modo - 3)Inserisco i dati nei campi

    Siccome i punti 1 e 3 sono uguali, non c'è modo di usare una stessa funzione richiamandola ogi volta che mi servono i dati? Io non ci sono riuscito.

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Perche non passi ideroe alla funzione attributi ? Ovviamente dovresti togliere il $_GET dalla funzione.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Perche non passi ideroe alla funzione attributi ? Ovviamente dovresti togliere il $_GET dalla funzione.
    Non so se ho capito, intendi dichiarare globalmente ideroe al di fuori della funzione? del tipo:
    codice:
    id_eroe ='<?php echo $_GET['id_eroe'];?>'
    
    function Attributi(){
    var ideroe = id_eroe;
    ......
    }

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Pensavo a questo. Comunque non so se bisogna o no scrivere success: function(id_eroe)
    codice:
     function Attributi(id_eroe){
      //var id_eroe = '<?php echo $_GET['id_eroe'];?>';
      
      $.ajax({
      type: "POST",
      url: "db/rpg_select.php",
      data: "id_eroe="+id_eroe,
      dataType: "html",
      tryCount : 0,
         retryLimit : 3,
      success: function(data){
        MyData(data);
        return data;
      },
       error: function(xhr, textStatus, errorThrown ) {
             if (textStatus == 'timeout') {
                 this.tryCount++;
                 if (this.tryCount <= this.retryLimit) {
                     $.ajax(this);
                     return;
                 }            
                 return;
             }
             if (xhr.status == 500) {
                
             } else {
                 alert('Connessione fallita');
             }
         }
     function MyData(data){
       var data = jQuery.parseJSON(data);
      //le mie variabili ad esempio
     nome=(data.nome);
     $('#nome').val(nome);
     }
     });
     }
     
     }
    codice:
     function MyData(data){
      var data = jQuery.parseJSON(data);
       nome=(data.nome);
       if(condizione > valore){
         nome='';
       }
      $.ajax({
      type: "POST",
      url: "db/reset.php",
      data: "id_eroe="+id_eroe+"&reset=nome",
      dataType: "html",
      success: function(){
        Attributi(id_eroe); //richiamo la funzione per aggiornare la schermata con i nuovi valori
       }
      });
     }
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194
    Ah ok, passare la variabile... sono a digiuno di terminologia, pardon.
    Se non chiedo troppo, puoi spiegarmi in che modo passare la mia variabile può far funzionare il codice?
    Non è implicito richiamando la funzione che vada a prendersi id_eroe nuovamente dal get?
    grazie

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Hai provato ?

    con : success: function()

    o con : success: function(id_eroe)

    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194
    Ho provato con success:function(), funziona solo se i dati restituiti (function MyData) sono al di fuori della funzione Attributi.
    Proverò più avanti passando la variabile come mi hai suggerito.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2014
    Messaggi
    194

    risolto ma con poca eleganza

    L'unico modo che ho trovato per rendere globali delle variabili ottenute con Ajax è inserirle in campi input nascosti e recuperarle all'occorrenza. Soluzione poco elegante e macchinosa, non linciatemi.
    Scusate eventuali errori, ho scritto di getto questo esempio.
    Ciao
    codice:
    function DataCall(){
     $.ajax({
     type: "POST",
     url: "il mio url",
     data: "i miei dati",
     dataType: "html",
     success: function(data){
       MyData(data);
       return data;
     },
      error: function() {
                alert('errore');
     }
    });
    }
    
    
    function MyData(data){
     var data = jQuery.parseJSON(data);
     var nome = (data.nome);
     var cognome = (data.cognome);
     $('#nome').val(nome);
     $('#cognome').val(cognome);
     
     Recupera();
     
    };
    
    
    function Recupera(){
     //riprendo i miei dati e li inserisco in variabili globali
     nome = document.getElementById('nome').value;
     cognome = document.getElementById('cognome').value;
    };
    
    
    
    function(){
     //utilizzo i miei dati dove voglio
     $('<div>Nome: '+nome+' Cognome: '+cognome+'</div>').dialog();
     
     // e se voglio li aggiorno
     $.ajax({
     type: "POST",
     url: "il mio url",
     data: "nome="+nome+"&cognome="+cognome,
     dataType: "html",
     success: function(){
      //richiamo i miei dati aggiornati
      DataCall();
     },
      error: function() {
                alert('errore');
     }
    });
     
    }

  10. #10
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da Ciakko Visualizza il messaggio
    L'unico modo che ho trovato per rendere globali delle variabili ottenute con Ajax è inserirle in campi input nascosti e recuperarle all'occorrenza. Soluzione poco elegante e macchinosa, non linciatemi.
    Premesso che qui non si lincia nessuno, e che i tuoi progetti li realizzi come meglio credi. Quello che mi stupisce è tre giorni di discussione sulle variabili globali poi non le usi, rifletterei su questo proseguo lo sviluppo o ripasso la teoria e i concetti JavaScript?

    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

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.