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(/\à/gi,"\aagrave\;");
stringa = stringa.replace(/\è/gi,"\eegrave\;");
stringa = stringa.replace(/\è/gi,"\eegrave\;");
stringa = stringa.replace(/\ì/gi,"\iigrave\;");
stringa = stringa.replace(/\ì/gi,"\iigrave\;");
stringa = stringa.replace(/\ò/gi,"\oograve\;");
stringa = stringa.replace(/\ò/gi,"\oograve\;");
stringa = stringa.replace(/\ù/gi,"uugrave;");// altrimenti non funziona.. booohh..
stringa = stringa.replace(/\ù/gi,"uugrave;");
stringa = stringa.replace(/\€/gi,"\eeuro\;");
stringa = stringa.replace(/\€/gi,"\eeuro\;");
stringa = stringa.replace(/\£/gi,"\epound\;");
stringa = stringa.replace(/\£/gi,"\epound\;");
stringa = stringa.replace(/\&/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