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

    utilizzare variabile di ritorno ajax in una funzione esterna

    Ciao a tutti, ho due funzioni:
    quella principale imposta() e quella secondaria controlla_cloni() che viene richiamata dalla prima e deve ritornare un valore frutto di una chiamata ajax. Il mio problema è che il valore di ritorno è undefined. Penso sia legato allo scope della variabile 'risposta' che comunque si trova in una funzione dentro la funzione....qualcuno può aiutarmi? Vi posto il codice di entrambe le funzioni.
    Grazie come sempre....il vostro aiuto è veramente prezioso.


    function controlla_cloni(anno,my_url)
    {
    var str_id_frase=document.getElementById('dba_id_frase ').value;
    var str_data=document.getElementById('dba_data').value ;
    var valore='';
    str_data=data_mysql(str_data);
    query="SELECT a.id_frase, COUNT(a.id_frase) AS conta_frase,a.data,f.* FROM t_avvisi"+anno+" AS a RIGHT OUTER JOIN t_frase"+anno+" AS f ON ( a.id_frase = f.id_frase ) where a.id_frase="+str_id_frase+" and a.data='"+str_data+"' group by (f.id_frase) having conta_frase>0";

    //imposta la variabile message che contiene i parametri per la richiesta ajax
    message="str_query="+encodeURIComponent(query);

    //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)
    {
    var risposta=request.responseText;
    if(risposta=='')
    {
    risposta=0
    }else{
    risposta=1
    }
    return(risposta);

    }

    }

    //continua ad inviare la richiesta finchè il readyState non è = 4
    request.send(message);
    }else{
    alert("Il tuo browser non è abilitato per l'utilizzo di ajax");
    }

    }


    function imposta()
    {
    var check=controlla_cloni(anno,my_url);
    if(check==1)
    {
    alert('Impossibile proseguire');
    return;

    }
    }

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Questa
    Codice PHP:
    query="SELECT a.id_frase, COUNT(a.id_frase) AS conta_frase,a.data,f.* FROM t_avvisi"+anno+" AS a RIGHT OUTER JOIN t_frase"+anno+" AS f ON ( a.id_frase = f.id_frase ) where a.id_frase="+str_id_frase+" and a.data='"+str_data+"' group by (f.id_frase) having conta_frase>0"
    vorebbe/dovrebbe essere una query lato server in una funzione lato client? Sai la differenza tra client e server?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    74
    certo....la variabile my_url punta al file db.php che fa da motore per tutte le query del mio sito. Il mio problema è semplicemente che non riesco a leggere la variabile di ritorno nella funzione chiamante perchè probabilmente non effettuo correttamente lo scope. Mi puoi aiutare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    la chiamata ajax è asincrona, non puoi sapere quando è terminata, va rivista la logica dello script tenendo a mente questo fattore.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    74
    Hai centrato il problema. Con la chiamata sincrona ho risolto. Grazie 1000!! Posto il codice funzionante:


    function controlla_cloni(anno,my_url)
    {
    var str_id_frase=document.getElementById('dba_id_frase ').value;
    var str_data=document.getElementById('dba_data').value ;
    var valore='';
    str_data=data_mysql(str_data);
    query="SELECT a.id_frase, COUNT(a.id_frase) AS conta_frase,a.data,f.* FROM t_avvisi"+anno+" AS a RIGHT OUTER JOIN t_frase"+anno+" AS f ON ( a.id_frase = f.id_frase ) where a.id_frase="+str_id_frase+" and a.data='"+str_data+"' group by (f.id_frase) having conta_frase>0";

    //imposta la variabile message che contiene i parametri per la richiesta ajax
    message="str_query="+encodeURIComponent(query);

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

    if (request)
    {
    request.open("POST",my_url,false);
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    request.onreadystatechange=
    function ()
    {
    if (request)
    {
    var risposta=request.responseText;
    if(risposta=='')
    {
    risposta=0
    }else{
    risposta=1
    }

    }


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


    return(risposta);
    }

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.