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

    Ajax (ahah) e controlli server-side

    ciao a tutti, sto realizzando una pagina che ah bisogno di molti controlli, uno di questi però deve essere fatto utilizzando ajax.

    praticamente l'utente digita delle parole in una casella di testo + volte, ad ogni invio questo testo si sposta un una texarea. e fino quì ajax non serve.

    ora vorrei ho aggiunto un controllo che se la parola digita esiste nel DB compare un alert con un messaggio A, altrimenti con un messaggio B.

    in linea teorica ho già fatto tutto, ma scontrandomi in pratica succede che la mia variabile viene valorizzata "dopo un pò" credo per effetto degli status della richiesta HTTP.

    questa è la funzione
    codice:
    function ahah(url, target, delay, method, parameters)
    {
    
    	  if (window.XMLHttpRequest)
    	 	 {req = new XMLHttpRequest();}
    	 else
    	 	{
    			if (window.ActiveXObject)
    			{req = new ActiveXObject("Microsoft.XMLHTTP");}
    		}
    	  if (req)
    	  	{
    			req.onreadystatechange = function() {
    			ahahDone(url, target, delay, method, parameters);
    		};
    		req.open("get", url, true);
    		req.send("");
    	  }
    	
    }  
    
    function ahahDone(url, target, delay, method, parameters)
    {
    	if (req.readyState == 4)
    	{ 
    		var stato = req.status
    		if (stato == 200)
    			{document.f.stato.value = req.responseText;}
    		
    	} 
    	
    }
    ma quando vado a provare
    codice:
    ...
    ...controlli
    ...
    //in questo punto devo sfruttare il controllo con ajax
    ahah("controlla_parola.asp?parola="+parola, "", "", "get", "");
    alert(document.f.stato.value);
    ...
    ...altri controlli
    ...
    ricevo il messaggio di alert relativo alla parola digitata precedentemente.

    come faccio invece a leggere il valore "all'istante"?

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Naturalmente sbaglierò ma il problema credo che sia forse la mediocre funzione che tu usi, precisamente ahah
    Infatti, quando tu lanci questa funzione, la variabile document.f.stato viene valorizzata in modo asincrono dopo qualche istante, mentre tu la interroghi subito:

    ahah(...);
    alert(...);

    Allora, o metti l'alert dentro la funzione ahahDone:

    if(stato == 200)...

    Questa soluzione non mi piace perchè credo che una funzione deve essere immutabile e non modificata secondo le circostanze.

    oppure, meglio, ti rivolgi a implementazioni più serie, tipo prototype

    Naturalmente, dato che sono in vacanza e perciò un poco arruginito, sarò molto contento se sarò smentito. Ciao
    Pietro

  3. #3
    Grazie per la risposta.

    avevo provato a l'alert dentro la funzione ahahDone, purtroppo il problema non è il messaggio di alert in se ma l'istante in cui viene valorizzata la variabile,

    io faccio

    controllo1
    controllo2
    controllo3_ahah
    controllo4
    controllo5

    quando arrivo al controllo4 io già dovrei avere il risultato del controllo_ahah document.f.stato.value, purtroppo però il valore di quel campo cambia in ritardo...

    non c'è modo anche senza l'ìuso di ahah, di ovviare?

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    prova a lanciare controllo4 e controllo5 da dentro la funzione ahahDone, cioè, nei pressi di:

    document.f.stato.value = ...
    Pietro

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.