Newsgroup: it.comp.lang.javascript
Titolo: ajax

ciao a tutti..
eccomi di nuovo a rompere l'anima il 13 agosto ai pochi volontari che
come me non hanno altro da fare che mettersi all'opera... =_=' (p.s.
solidarietà per tutti voi...anzi noi)
Comunque ecco il problema...
La pagina delle funzioni js, come indicavo in un post precedente viene
caricata attraverso un file php, dinamicamente. Il sig. Alessandro
diceva che in questo modo mi sarei fottuo il caching del browser.
Non ho ben capito cosa intendesse. La prima cosa che ho fatto per
togliere il disturbo che ora vi spiegherò è inserire queste due righe
di codice all'interno della pagina "header":
<meta http-equiv="expires" content="-1">
<meta http-equiv="pragma" content="no-cache">
vorrei appunto forzare il browser a non "cachare" i dati ad ogni
richiesta asincrona che faccio, ma non so se ho fatto la cosa giusta
in questo modo.
Cercherò di spiegarmi al meglio, nonostante la situazione sia un pò
complicata...
All'interno della pagina index.php, all'inizio, includo la pagina
header.php che a sua volta include i vari file css, js, php che
servono a tutte le pagine che includo nel programma.
All'accesso, il primo div che si vede è un accordion JQueryUi
impostato con "active: false" per partire direttamente chiuso e far
scegliere all'utente quale "pannello" aprire.
Tra le varie funzioni ce n'è una dei messaggi che apre un div che si
aggiorna ogni 8 secondi:
function temporizza(){
	timerId=setInterval("leggiChat()", 8000);
}
la funzione leggiChat():
function leggiChat(){
	var x=$("#gpsX").val();
	var y=$("#gpsY").val();
	if(x==""){x=0;} if(y==""){y=0;}
	var qstr="readChat=1&x="+parseInt(x)+"&y="+parseInt(y);
	//alert(qstr);
	z=ajaxGetRequest("GET","inc/chat.inc.php",qstr,"#testoChat");
	z=null;
}
la funzione ajaxGetRequest():
function ajaxGetRequest(tipo,relativeUrl,queryString,elementResponse){
	//funzione per creare richieste asincrone via GET o POST (tipo)
	//ESEMPI:
	//type: str("GET");
	//relativeUrl=str("inc/news.inc.php");
	//queryString=str("a=ON&b=0&c=20");
	//elementResponse=str("#news");
	$.ajax({
		type: tipo,
		url: relativeUrl,
		data: queryString,
		success: function(response){
			$(elementResponse).html(response);
		},
		//ajaxComplete: alert("Caricamento completato... <br>URL:
"+relativeUrl+"<br>DATA: "+queryString+"<br> TYPE: "+tipo)
	});
}
questa invece è la funzione per stoppare il timeInterval quando esco
dalla chat. Se non azzero i tre input iniziali, la prossima volta che
riapro il div li trovo con le cose che ho scritto prima...
function chiudiChat(){
	$("#gpsX").val("");
	$("#gpsY").val("");
	$("#msgTxt").val("");
	clearInterval(timerId);
	closeTab('chat');
	closeTab('gps');
}
ogni singola funzione presa separatamente funziona a dovere. Non ho
problemi nell'esecuzione. Il problema grosso è che ogni 8 secondi
ottengo dei comportamenti inaspettati:
- l'accordion del menu se è aperto si chiude
- se sto scrivendo una frase da inviare in chat, tramite una semplice
casella di testo, mi si ferma per un paio di secondi, impedendomi di
scrivere. Non perdo il focus della casella, ma è come se la pagina si
congelasse fino a che fa la richiesta, dopo di che riprende di nuovo
il suo normale funzionamento.
- se sto trascinando dei div draggable lo snap si viene a perdere
durante lo scadere degli 8 secondi, come la casella di prima è come se
la pagina si congelasse...
Vorrei evitare questi fastidiosi eventi, ma non ho idea di come fare.
Forse sbaglio nell'inviare la richiesta ajax via GET e dovrei farlo
via POST?
Avete dei consigli utili?? Grazie a tutti e buona giornata!!!!

Vorrei poter essere utile, ma dato che le singole funzioni funzionano a dovere separatamente, vanno contestualizzate all'interno del programma. Secondo me se pubblichi la pagina incriminata si può ragionare meglio.

 via POST?
uso solo post faccio prima



wrote:

grazie mi hai dato una dritta a cui non avevo pensato da buon
principiante :-)


wrote:

in base a questo: (
http://api.jquery.com/jQuery.ajax/
)
asyncBoolean
Default: true
By default, all requests are sent asynchronously (i.e. this is set to
true by default). If you need synchronous requests, set this option to
false. Cross-domain requests and dataType: "jsonp" requests do not
support synchronous operation. Note that synchronous requests may
temporarily lock the browser, disabling any actions while the request
is active.
con questo codice:
$.ajax({
		type: tipo,
		url: relativeUrl,
		data: queryString,
		success: function(response){
			$(elementResponse).html(response);
		},
		//ajaxComplete: alert("Caricamento completato... <br>URL:
"+relativeUrl+"<br>DATA: "+queryString+"<br> TYPE: "+tipo)
	});
automaticamente la richiesta al server dovrebbe essere A-Sincrona.
Come si spiega che pur essendo in modalità Asincrona ho gli effetti-
difetti della modalità Sincrona??
Il dilemma di ferragosto =_='
E meno male che sono in ferie...
Grazie a tutti...

 il suo normale funzionamento.
Come è già stato detto, viene da pensare che sia una richiesta sync, ma
jQuery per default usa richieste async. Hai quest'effetto su ogni
browser, o su uno specifico? Su quale hai testato? Hai aperto una
webconsole per vedere il traffico di rete e capire cosa succede quando
fai la richiesta? Ti dovrebbe far vedere i tempi in cui ci mette il
server a rispondere effettivamente. Puoi così capire quando rallenta, da
cosa dipende.
Ad esempio il congelamento potrebbe avvenire anche per le operazioni DOM
che fai, e non tanto per la richiesta in sé. Mi ricordo che ai tempi di
IE6, con i computer dell'epoca, alcuni inserimenti di tabelle troppo
corpose congelavano il browser.
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 improbable, must be the truth."
(mi piace la tua firma ^^ )

 (mi piace la tua firma ^^ )
È la frase che Sir Arthur Conan Doyle soleva far dire al suo
personaggio, Sherlock Holmes. E trovo che ben si applichi anche alla
programmazione dei giorni nostri. :)
