Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    settare una variabile come array e passarle dati via GET?!

    ciao a tutti, sono praticamente nullo di javascript, ma vorrei capire come poter fare questa cosa:

    vorrei istanziare una variabile "result" come se fosse un array vuoto,

    codice:
    var result = [];
    come faccio successivamente ad assegnarle dei valori che recupero da una query MySql ?!

    codice:
    $.ajax({
        type: "GET",
        url: "queryMySql.php",
        success: function(data) {
            var result = jQuery.parseJSON(data);
            //alert(result); // object object
            //return(test);
        },
        error: function (jXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }
    });
    come indicato nel commento se faccio un alert, ottengo "object object" e non so come trattarlo..

    l'alert di (data) produce:

    codice:
    [["nome1",11,11,5],["nome2",9,10,5],["nome3",9,13,3],["nome4",11,12,2],["nome5",10,14,1]]


    l'array giusto in javascript dovrebbe avere questa forma:

    codice:
    var result = [
    ['nome1', val1, val1, val1],
    ['nome2', val2, val2, val2]
    ...
    ];


    Grazie a tutti per i chiarimenti e per l'aiuto!
    Ultima modifica di aquatimer2000; 22-01-2020 a 01:31
    aquatimer2000

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,539
    Ciao, quell'alert può restituire [object Object] come rappresentazione testuale di un oggetto; in teoria se gli viene passato un array dovrebbe automaticamente mostrare il relativo contenuto, ma il contesto non è chiaro per capire le cause del problema. Bisognerebbe fare delle prove ma è necessario sapere quale browser usi, quale versione di jQuery, qual è il dato esatto che viene restituito dalla pagina php.

    A prescindere da questo ci sono altre cose che potrebbero non tornare.

    Non serve dichiarare e inizializzare la variabile result fuori dalla funzione in questione (a livello globale o comunque in un diverso contesto di visibilità) se poi la stai nuovamente dichiarando (a livello locale) e inizializzando dentro la funzione; in questo caso saranno viste come due distinte variabili relativamente al contesto di visibilità in cui vengono considerate. Questo non pregiudica comunque il risultato che stai ottenendo, cioè se l'alert viene lanciato dentro quella funzione allora è considerata la variabile dichiarata e inizializzata in quella funzione.

    Nella chiamata ajax, se stai ricevendo un dato in formato testuale JSON, dovrebbe essere impostato il parametro dataType:"json", anche se di default il sistema tenta di indovinare il tipo di dati ricevuti.

    Se stai ricevendo dati in formato testuale JSON conviene comunque usare l'apposita funzione getJSON di jQuery, che sostanzialmente è una abbreviazione della funzione Ajax preimpostata per gestire quel tipo di dati. I dati in risposta sono automaticamente convertiti in un oggetto JavaScript (che potrebbe anche essere un array).

    Per verificare meglio i dati in risposta, conviene usare la funzione console.log() piuttosto che alert(). Attraverso la console del tuo browser (pigia F12 per aprirla) puoi esaminare tali dati nel dettaglio. Nel caso di un oggetto (o un array), ad esempio, questo verrà mostrato nella console secondo la sua reale struttura, che puoi espandere per esaminare ciò che ci sta dentro; a differenza dell'uso di alert in cui la cosa si limita alla sola rappresentazione testuale.

    Prova in questo modo:
    codice:
    $.getJSON('queryMySql.php', function(data) {
       console.log(data);
    }).fail(function() {
       console.log('error');
    });
    Verifica quindi cosa ti salta fuori in console.
    Fai sapere.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Intanto grazie per la risposta!!

    Cerco di darti più informazioni che posso:

    - il browser è chrome (ultima versione);
    - jQuery : ... 1.12.4/jquery.min.js;


    codice:
    $.getJSON('queryMySql.php', function(data) {
       console.log(data);
    }).fail(function() {
       console.log('error');
    });
    
    /* la console mi dice che ottengo un array, e vedo il contenuto effettivo dell'array  */

    questa qui di seguito è la mia situazione:

    codice:
    setInterval(function reloadData() {
    
    /*
    se result viene settato così, reloadData funziona bene:
    var result = [
        ['nome1', val1, val1, val1],
        ['nome2', val2, val2, val2]
    ];
    */
    
    /*
    al posto dell'array sopra, come faccio a settare una variabile di nome "result", che prende i dati da:
    
    $.getJSON('queryMySql.php', function(data) {
       console.log(data);
    }).fail(function() {
       console.log('error');
    });
    
    data, da console, è così:
    (2)[Array(4),Array(4)]
    .. i valori dei 2 array di 4 valori ognuno;
    lenght:2
    __proto__: Array(0)
    
    
    */
    
    }, 10000);
    Grazie ancora per l'aiuto!
    Ultima modifica di aquatimer2000; 22-01-2020 a 09:28
    aquatimer2000

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,539
    Perfetto, quindi la chiamata Ajax sta passando bene i valori. Vedo che stai effettuando quella chiamata ogni 10 secondi, dentro un callback nel setinterval. La variabile result la stai definendo (con var) nell'ambito della funzione reloadData() (cioè il callback del setinterval); in tal caso tieni conto che non sarà visibile all'esterno di quella funzione. Se vuoi avere una variabile visibile in qualsiasi punto dello script, devi dichiararla a livello globale, cioè nel livello principale, fuori da qualsiasi funzione.

    Considera inoltre che il risultato (cioè i dati ricevuti dalla chiamata Ajax) sarà disponibile solo quando viene eseguita la funzione callback definita per tale chiamata. In altre parole devi fare attenzione a dove/quando usare tale variabile.

    Qui un esempio pratico di come recuperare i dati e visualizzarli sulla pagina (ovviamente è uno scenario ipotetico, non so quale sia la tua esigenza e la reale situazione):
    codice:
    <!DOCTYPE HTML>
    <html lang="it">
       <head>
          <title>Esempio</title>
          <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
          <script>
    
             setInterval(reloadData, 10000);
             reloadData();
             
             function reloadData() {
    
                var result = [];                              // Definisco la variabile *result*, sarà visibile solo nell'ambito locale di questa funzione reloadData() e chiaramente in tutte le funzioni e gli script interni a questa.
               
                $.getJSON('queryMySql.php', function(data) {
                
                   result = data;                            // Popolo la variabile *result* (definita prima) passando i dati (convertiti già in array) appena recuperati dalla chiamata AJAX
                   
                   visualizzaOutput(                         // Posso usare questa variabile per passarla ad eventuali altre funzioni
                      parsingRisultato(result)
                   )
                   
                }).fail(function() {
                
                   visualizzaOutput('Errore lettura dati');
                   
                });
                
             }
             
             function parsingRisultato(arr){                 // Esempio di parsing
                return arr.length ? '<ul><li>' + arr.join('<li>') + '</ul>': 'Nessun risultato';
             }
             
             function visualizzaOutput(str){                 // Esempio di visualizzazione
                $('#output').html(str);
             }
    
          </script>
      </head>
       <body>
          Output: <div id="output"></div>
       </body>
    </html>
    .
    Fai qualche prova, se hai bisogno di chiarimenti chiedi pure.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  5. #5
    perfetto, ho risolto con:

    result = data; all'interno di $.getJSON

    codice:
    setInterval(function reloadData() {
    
    $.getJSON('queryMySql.php', function(data) {
       console.log(data);
       result = data; 
    }).fail(function() {
       console.log('error');
    });
    
    esegui(result);
    
    
    }, 10000);
    
    
    function esegui(result) {
    
     ...
    ....
    
    }
    Grazie mille per tutti i consigli!
    Ultima modifica di aquatimer2000; 22-01-2020 a 12:08
    aquatimer2000

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,539
    Bene, fai attenzione però, le chiamate Ajax sono per definizione asincrone, per cui se lanci quella chiamata esegui(result); fuori dal callback del getJSON (cioè l'evento determinato dalla ricezione dei dati) presumibilmente avrai un ritardo fino alla successiva chiamata Ajax (10 secondi dopo). Sarebbe meglio spostare esegui(result); dentro il callback, vedi mio esempio. Ma a questo punto non ti serve nemmeno definire la variabile result, sarebbe sufficiente passare direttamente la variabile data, a meno che non ci siano altre cose che hai tralasciato di indicare ma che possono influire sul processo.

    codice:
    setInterval(function reloadData() { 
       $.getJSON('queryMySql.php', function(data) {
          esegui(data);
       }).fail(function() {
          console.log('error');
       });
    
    }, 10000);
    
    function esegui(result) {
    
     ...
    ....
    
    }
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

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 © 2020 vBulletin Solutions, Inc. All rights reserved.