Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    74

    problema scope variabili chiamata ajax

    Ciao a tutti, di seguito vi posto il codice per una chiamata ajax a un file php che restituisce una stringa. Devo inserire il valore di ritorno dentro la variabile gruppo (dichiarata come globale) e utilizzarla all'interno dello script. Al termine della richiesta ajax ho inserito un alert per vedere se la variabile gruppo era stata correttamente impostata al valore di ritorno ma, niente da fare, ottengo un'alert vuota. Invece, se inserisco l'alert all'interno della funzione che determina lo stato della richiesta ajax, ottengo correttamente la variabile. Come faccio a utilizzarla all'esterno della funzione?

    Grazie 1000 per l'aiuto.

    var gruppo='';

    //richiesta ajax
    if (window.XMLHttpRequest)
    {
    request=new XMLHttpRequest();
    }else{
    request=new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (request)
    {
    request.open("POST",my_url);
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

    request.onreadystatechange=
    function()
    {
    if (request.readyState == 4)
    {

    gruppo=request.responseText;

    alert (gruppo); //restituisce valore corretto

    }

    }

    request.send(message);
    }else{
    alert("Il tuo browser non è abilitato per l'utilizzo di ajax");
    }
    alert (gruppo); //restituisce alert vuota

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    La variabile gruppo verra' valorizzata al termine della ricezione del messaggio di ritorno della funzione ajax... se tu esegui un alert prima e' ovvio che ottieni nulla
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    74
    Però il valore di ritorno mi viene correttamente impostato quando lo stato della richiesta è = 4, il problema è che la variabile gruppo, terminata la chiamata ajax, rimane vuota. In quale punto la perdo?
    Grazie.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Ma la chiamata a che evento viene esguita?
    Sicuro che send() vada in fondo?
    Sicuro che non ci vada open()?
    E posibile vedere una pagina online demo x testare il tutto?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    74
    Se la chiamata non venisse completata io non avrei il valore di ritorno che viene correttamente inserito nella variabile 'gruppo' quando lo stato della chiamata è = 4. Penso che il problema sia lo scope della variabile perchè di fatto viene dichiarata al di fuori della funzione, ma il suo valore viene impostato all'interno della funzione stessa, io devo utilizzare quel valore fuori dalla funzione. Purtroppo sto lavorando in locale e non ho una demo on line.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    74
    ....per favore, qualcuno riesce a darmi una dritta? Non posso proseguire altrimenti. Grazie.

  7. #7
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Ho gia' cercato di dirtelo, ma forse sono stato troppo criptico
    Cosi' come e' strutturato lo script non puo' funzionare: stai facendo una chiamata asincrona e non puoi sapere a priori quando arrivera' la risposta... tu invece pretendi di conoscere il valore immediatamente...

    Se lo script deve necessariamente avere quel valore per poter proseguire valuta l'opportunita' di fare una chiamata ajax sincrona al posto di quella attuale.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    74
    In effetti ho fatto qualche prova e avevi ragione tu, ho aggirato l'ostacolo facendo inserire il valore di ritorno in un campo hidden del form in modo da poterlo recuperare in qualsiasi momento. Non so se è una soluzione corretta ma è funzionale. Grazie per il consiglio. Ciao

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