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

    AJAX mi prende in giro!!!

    Salve a tutti,
    ho un problema abbastanza "anomalo" con AJAX...
    Vi spiego...
    Effettuo delle richieste ad una pagina php tramite alcuni script (che posto giù in basso)...
    La pagina php mi risponde con del codice html o con un'altro script (tipo <SCRIPT>alert('Operazione effettuata con successo!');</SCRIPT>) che vado a scrivere in un div della pagina html da dove viene eseguito lo script...
    TUTTO FUNZIONA egregiamente... a parte il fatto che molto di rado sul mio pc, (ma chissà perchè molto spesso quando vado a testarlo sul pc del cliente, facendo delle figuraccie allucinanti...), avviene un cosa strana:
    All'improvviso, quando provo ad effettuare delle richieste il sistema non risponde!!! Cioè, io clicco il pulsante per effettuare delle operazioni e non succede niente!!!! Ci riprovo diverse volte e niente!!!! Poi all'improvviso il tutto torna a funzionare nuovamente!!!
    La cosa strana è che non ho nessun errore... il sistema si limita semplicemente a non cagare le mie richieste!!!
    Ho controllato anche la consolle errori di firefox ma niente... nessun errore.
    Questo problema si verifica sia con explorer che con firefox e ripeto, cosa stranissima mi combina questo scherzetto molto di rado (in 20 giorni di test circa 15 volte, ma appena arrivo dal cliente me lo combina dopo una decina di richieste).
    La cosa più odiosa è che non ricevo errori, ne riesco a ricreare il problema "a comando" per tentare di capire (poichè non so a cosa è dovuto).
    Una sola parola.. HELP!!!
    Ecco gli script che uso:
    codice:
    function makePOSTRequest(url, parameters) {
    		http_request = false;
    			if (window.XMLHttpRequest) { // Mozilla, Safari,...
    				http_request = new XMLHttpRequest();
    			         if (http_request.overrideMimeType) {
    						http_request.overrideMimeType('text/xml');
    					}
    			} else if (window.ActiveXObject){ // IE
    				try {
    					http_request = new ActiveXObject("Msxml2.XMLHTTP");
    				} catch (e) {
    					try {
    						http_request = new ActiveXObject("Microsoft.XMLHTTP");
    					} catch (e) {}
    				}
    			}
         
    			if (!http_request) {
    				alert('Cannot create XMLHTTP instance');
    				return false;
    			}
          
    		http_request.onreadystatechange = alertContents;
    		http_request.open('POST', url, true);
    		http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    		http_request.setRequestHeader("Content-length", parameters.length);
    		http_request.setRequestHeader("Connection", "close");
    		http_request.send(parameters);
    	}
    	
    	function alertContents(){
    			if (http_request.readyState == 4) {
    				if (http_request.status == 200){
    						result = http_request.responseText;
    						document.getElementById('content').innerHTML = result;
    						execJS(document.getElementById('content'));
    				}else{
    					alert('Si è verificato un errore momentaneo');
    
    				}
    			}
    	}
    Questo serve per far si che vengano eseguiti gli script che vengono scritti da php:
    codice:
    function execJS(node){
    		var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
    		var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
    		var bMoz = (navigator.appName == 'Netscape');
    
    		var st = node.getElementsByTagName('SCRIPT');
    		var strExec;
    			for(var i=0;i<st.length;i++){     
    				if(bSaf){
    					strExec = st[i].innerHTML;
    				}else if(bOpera){
    					strExec = st[i].text;
    				}else if(bMoz){
    					strExec = st[i].textContent;
    				}else{
    					strExec = st[i].text;
    				}
    				
    
    				try{
    					eval(strExec);
    				}catch(e){
    					alert(e);
    				}
    			}
    		}
    Questo serve per evitare brutte sorprese con i caratteri speciali (rifaccio poi il replace da php).
    codice:
    function covertReplace(stringa){
    
    		stringa = stringa.replace(/\à/gi,"\aagrave\;");
    		stringa = stringa.replace(/\&agrave;/gi,"\aagrave\;");
    		stringa = stringa.replace(/\è/gi,"\eegrave\;");
    		stringa = stringa.replace(/\&egrave;/gi,"\eegrave\;");
    		stringa = stringa.replace(/\ì/gi,"\iigrave\;");
    		stringa = stringa.replace(/\&igrave;/gi,"\iigrave\;");
    		stringa = stringa.replace(/\ò/gi,"\oograve\;");
    		stringa = stringa.replace(/\&ograve;/gi,"\oograve\;");
    		stringa = stringa.replace(/\ù/gi,"uugrave;");// altrimenti non funziona.. booohh..
    		stringa = stringa.replace(/\&ugrave;/gi,"uugrave;");
    		
    		stringa = stringa.replace(/\€/gi,"\eeuro\;");
    		stringa = stringa.replace(/\&euro;/gi,"\eeuro\;");
    		stringa = stringa.replace(/\£/gi,"\epound\;");
    		stringa = stringa.replace(/\&pound;/gi,"\epound\;");
    		
    		stringa = stringa.replace(/\&amp;/gi,"\eecommerciale\;");
    		stringa = stringa.replace(/\&/gi,"\eecommerciale\;");
    		stringa = stringa.replace(/\+/gi,"\simbolopiu\;");
    		//stringa = stringa.replace(/\=/gi,"\simbolouguale\;");
    		
    		return stringa;
    	
    	}
    Che richiamo con:
    codice:
    function esegui() {
    		var poststr = "valore=" + encodeURI(covertReplace('Questo è un valore!'));
    		makePOSTRequest('pagina.php', poststr);
    	}
    Sto impazzendo... vi prego, datemi qualcosa a cui attaccarmi! (Che non sia il tram ovviamente! )
    Grazie ancora
    What is the |\/|atrix?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ma tutti i \ in covertReplace nella stringa con cui sostituisci al match della regex... non sono caratteri di escape? Non andrebbero raddoppiati? es:
    codice:
    stringa = stringa.replace(/\à/gi,"\\aagrave\\;");
    e proprio il fatto che quello con la "u" non vada mi fa pensare che sia lì l'inghippo... in Java ad esempio \uxxxx nelle regex serve per indicare il carattere unicode con codice esadecimale xxxx
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Beh intanto bisogna chiarire se la richiesta arriva almeno al server o non parte proprio.

    Metti un'opportuno log nella funzione makePOSTRequest, ed eventualmente tramite Firebug posta quello che ti arriva dal server.
    \Backslash\

  4. #4
    Originariamente inviato da backslash
    Beh intanto bisogna chiarire se la richiesta arriva almeno al server o non parte proprio.

    Metti un'opportuno log nella funzione makePOSTRequest, ed eventualmente tramite Firebug posta quello che ti arriva dal server.
    Innanzitutto vi ringrazio per avermi risposto!
    Come detto prima la richiesta parte, arriva al server e ritorna correttamente!
    In più i replace che faccio funzionano alla perfezione!
    Il problema come detto prima è che se ad esempio esempio lo script 1000 volte funziona correttamente, lo eseguo altre 1001,1002,1003 e NON FUNZIONA (totalmente morto), lo torno a rieseguire 1005,1006 ecc... e torna a funzionare!
    Cioè il 99% delle volte va, l'1% delle volte muore, senza provocare nessun errore!
    Giusto che siamo in tema qual è la giusta sintassi per eseguire il replace ad esempio della "à" con "aagrave;"?
    P.s. Non la trasformo in &agrave; poichè la & potrebbe interrompere la querystring, poi da php faccio il replace di "aagrave;" con "&agrave;".
    Altro p.s. come faccio a metter un log dentro makePOSTRequest e cos'è Firebug???
    What is the |\/|atrix?

  5. #5
    Nessuna idea?
    Comunque il replace lo riscritto:
    N.b. lo spazio tra & e agrave lo messo solo perchè altrimenti qui nel forum me lo trasformerebbe in à.
    codice:
    stringa = stringa.replace(/à/g, "aagrave;");
    stringa = stringa.replace(/&agrave;/g,"aagrave;");
    stringa = stringa.replace(/è/g, "eegrave;");
    stringa = stringa.replace(/&egrave;/g,"eegrave;");
    stringa = stringa.replace(/ì/g, "iigrave;");
    stringa = stringa.replace(/&igrave;/g,"iigrave;");
    stringa = stringa.replace(/ò/g, "oograve;");
    stringa = stringa.replace(/&ograve;/g,"oograve;");
    stringa = stringa.replace(/ù/g, "uugrave;");
    stringa = stringa.replace(/&ugrave;/g,"uugrave;");
    
    stringa = stringa.replace(/€/g,"eeuro;");
    stringa = stringa.replace(/&euro;/g,"eeuro;");
    
    stringa = stringa.replace(/£/g,"epound;");
    stringa = stringa.replace(/&pound;/g,"epound;");
    
    stringa = stringa.replace(/&amp;/g,"eecommerciale;");
    stringa = stringa.replace(/&/g,"eecommerciale;");
    
    stringa = stringa.replace(/\+/g,"simbolopiu;");
    What is the |\/|atrix?

  6. #6
    up!
    What is the |\/|atrix?

  7. #7
    Vi chiedo almeno di dirmi una cosa...
    Noto che dai computer che sono in una LAN molto spesso e volentieri mi si verifica l'errore "Si è verificato un errore momentaneo" che si trova nell'else di questa funzione:
    codice:
    function alertContents(){
    			if (http_request.readyState == 4) {
    				if (http_request.status == 200){
    						result = http_request.responseText;
    						document.getElementById('content').innerHTML = result;
    						execJS(document.getElementById('content'));
    				}else{
    					alert('Si è verificato un errore momentaneo');
    
    				}
    			}
    	}
    Come mai secondo voi?
    A cosa è dovuto questo errore?
    Come risolvo?
    Grazie ancora!
    What is the |\/|atrix?

  8. #8
    Stampando un milione di alert e testando il sistema un miliardo di volte sono riuscito a capire qual è il problema, ma non sono ancora riuscito a trovare la soluzione...
    Il problema si verifica quando richiamo "onreadystatechange" e non sempre..
    Cioè la maggior parte delle volte lo script viene eseguito subito, ma capita qualche volta che il sistema prima di entrare nella funzione sull' "onreadystatechange" ci mette anche tre minuti!!!
    Perchè?
    Come faccio a settare una specie di timer che fa si che se passano più di tot secondi e lo script non è entrato nella funzione di "onreadystatechange" ripeta nuovamente la funzione oppure esca?
    Grazie a tutti!
    What is the |\/|atrix?

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.