Visualizzazione risultati 1 fino 5 di 5

Discussione: problema con funzione di callback

  1. #1
    Guest

    Predefinito problema con funzione di callback

    salve..
    vi espongo il mio problema con del codice js/ajax:

    se uso questo:

    Codice:
    <p id='settingBoxTitle'>Logo & Titolo</p><p id='settingBoxSubTitle'>Imposta il logo, ed il titolo per il tuo forum.</p><div id='settingBoxContent'><p class='settingBoxContentTitle'>Scegli il titolo</p><form action='#' method='post'>Usa il campo sottostante per inserire il titolo del tuo forum.<p><input type='text' name='mainTitle' id='mainTitle' value='Scrivi il titolo' class='txtField' onblur='validateTitle();' />&nbsp;<span id='spanCheck'> </span><span id='warning' style='border:1px solid red; filter:alpha(opacity=60); -moz-opacity:0.6; opacity: 0.6; margin:5px;'></span></p><p class='settingBoxContentTitle'>Logo</p>Seleziona un'immagine da utilizzare come logo.<p><input type='file' name='logoUploader' /></p><input type='submit' name='invia' value='Invia' class='inputBtn' /></form><div style='display:none;'><img src='./img_general/check0.png' /><img src='./img_general/check1.png' /></div></div>
    
    // e poi nello script
    
    function validateTitle() {
    	
    	var xmlhttp;
    	if (window.XMLHttpRequest) {
    		// code for IE7+, Firefox, Chrome, Opera, Safari
    	    xmlhttp = new XMLHttpRequest();
       	}
    	else {
    		// code for IE6, IE5
       		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
       	}
    	
    	xmlhttp.onreadystatechange = function() {
    		
    		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    			document.getElementById("spanCheck").innerHTML=xmlhttp.responseText;
    		}
    		
    	}
    	
    	xmlhttp.open("POST","./php_ajax/validateTitle.php",true);
    
    	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	
    	var parameter = "mainTitle=" + encodeURIComponent(document.forms[0].elements.namedItem("mainTitle").value);
    
    	xmlhttp.send(parameter); 
    	
    }
    tutto funziona... ma se faccio la stessa cosa provando ad usare una funzione di callback (così in fututo da non dovere ripetere codice):

    Codice:
    <p id='settingBoxTitle'>Logo & Titolo</p><p id='settingBoxSubTitle'>Imposta il logo, ed il titolo per il tuo forum.</p><div id='settingBoxContent'><p class='settingBoxContentTitle'>Scegli il titolo</p><form action='#' method='post'>Usa il campo sottostante per scegliere il titolo del tuo forum.<p><input type='text' name='mainTitle' id='mainTitle' value='Scrivi il titolo' class='txtField' onblur='validateTitle(\"mainTitle\",\"spanCheck\");' />&nbsp;<span id='spanCheck'> </span><span id='warning' style='border:1px solid red; filter:alpha(opacity=60); -moz-opacity:0.6; opacity: 0.6; margin:5px;'></span></p><p class='settingBoxContentTitle'>Logo</p>Seleziona un'immagine da utilizzare come logo.<p><input type='file' name='logoUploader' /></p><input type='submit' name='invia' value='Invia' class='inputBtn' /></form><div style='display:none;'><img src='./img_general/check0.png' /><img src='./img_general/check1.png' /></div></div>
    
    
    function ajaxFunction(inputName,phpFile,theRealFunction) {
    	
    	var xmlhttp;
    	if (window.XMLHttpRequest) {
    		// code for IE7+, Firefox, Chrome, Opera, Safari
    	    xmlhttp = new XMLHttpRequest();
       	}
    	else {
    		// code for IE6, IE5
       		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
       	}
    	
    	xmlhttp.onreadystatechange = theRealFunction; 
    			
    	xmlhttp.open("POST",phpFile,true);
    	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	
    	var parameter = inputName + "=" + encodeURIComponent(document.forms[0].elements.namedItem(inputName).value);
    
    	xmlhttp.send(parameter);
    		
    }
    
    function validateTitle(inputName,spanID) {
    	// inputName è una variabile che contiene il nome del campo input in cui è inserito il testo
    	// spanID è una variabile che contiene l'id dello span in cui inserire l'immagine con l'esito dell'operazione
    	
    	ajaxFunction(inputName,"./php_ajax/validateTitle.php",function() {
    		if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    			document.getElementById(spanID).innerHTML=xmlhttp.responseText;
    		}
    	});
    	}
    non va, e non capisco il perchè... a me sembra tutto ok...

    il file php è lo stesso per entrambi, e dunque il problema direi che non sta li... quindi evito di postare...

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Il problema è che nel secondo caso la funzione che hai dichiarato non può vedere la variabile xmlhttp, crea una funzione intermedia in ajaxFunction che richiami la funzione di callback passando come parametro l'oggetto XMLHttpRequest.

  3. #3
    Guest

    Predefinito

    ti ringrazio per la pronta risposta... ma non sono riuscito a risolvere...

    io comunque avevo preso spunto dallo script del W3schools... è un caso simile al mio... con la funzione di callback... ma non usano ulteriori funzioni per passare l'oggetto XMLHttpRequest...

    sei sicuro sia quello il problema?
    grazie per la disponibilità

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,744

    Predefinito

    Quel codice è diverso: la variabile xmlhttp non è stata dichiarata dentro la funzione loadXMLDoc, ma è globale, dunque visibile a tutti.

  5. #5
    Guest

    Predefinito

    ti ringrazio..
    non me ne ero accorto...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •