comportamento anomalo con IE 9 e 10

  • Creatore Discussione Creatore Discussione ans66
  • Data di inizio Data di inizio
Si. ho caricato gli ultimi file che mi hai inviato.

Ti ho passato per email tutto il lavoro di controllo fatto con IE Tester (che purtroppo non conosco molto) su IE 7,8,10 (9 non funziona) e ovviamente quello che mi avevi chiesto con F12 di IE.

Ho usato immagini (print screen) per farti vedere in diretta, passo per passo.
 
ma c'è una cosa al momento che mi è incomprensibile,
la risposta che ti da il server è una pagina html !
...
quindi oso dire che il "metodo client/server per ottenere dati, centra poco ...
ciao
Marino

Ho provato con IE in locale, inserendo il tuo alert:
Codice:
if (form_tag == "select#Diametro"){ alert(data); }
e ho come data una pagina html dove solo una parte racchiude le Select.

Ma credimi è sempre stato così....non so se questo sia un problema.

Ho provato anche con Google Chrome e Firefox e non cambia: ho sempre una serie di istruzioni html seguite poi dalle select.
 
Ciao Marino,

eventualmente non si potrebbe provare a modificare il contenuto di data come segue:

Codice:
xmlhttp.onreadystatechange=function()
			{
				if (xmlhttp.readyState==4 && xmlhttp.status==200)
				{
					data = xmlhttp.responseText;
					if (via==1) { $(form_tag).removeAttr("disabled"); }
          
          var n = data.indexOf("<select");
          data = data.substring(n)
          
					$(form_tag).html(data);
					if (form_tag == "select#Diametro"){ 
          
           }
				}
			}

Ho provato questo codice solo in localhost e funziona senza problemi.

Lo carico in rete solo se mi dai tu l'ok
 
ciao Antonio, si l'idea è giusta, estrarre solo le select-option-select dal documento che arriva dal server,
l'unica cosa, aggiungerei anche la posizione di fine della stringa da estrarre per evitare la "coda" del documento se ci fosse
poi eseguirei l'operazione solo nel caso 1, ovvero popolazione delle tabelle perché il contarecord funziona
(differenza di comportamento tra tag select e tag div .... ?)
anche se con qualche ridondanza ti posto il codice modificato
Vedi l'allegato tabella5_GET_20141109_2.zip
se lo metti in linea sono curioso di provare con XP
ciao
Marino
 
ho caricato tabella5.js. Purtroppo provando con IE tester ho il solito risultato
 
prova a vedere win xp, gestisce male le select perché i valori ci sono,
confronta applicazione e volvenza, guarda tra le option di volvenza, i valori ci sono
ciao
Marino
Cattura.PNG
 
hallo, how are you doing ?
so, good news, xp ie8 it's working fine ... and very fast ...
all the best for your journey
Marino
 
Great! Really Well Done! Grazie davvero. Non vedo l'ora di poter vedere con calma la tua ultima versione del file tabella5.js e di imparare qualcosa di nuovo.
 
vorrei riepilogare i post (tanti) con un ultimo, dicendo quello che è stato fatto, magari postando il set dei files ..., pensi sia corretto ?
ciao
Marino
 
Ciao Marino,

Sono d'accordo. Ho bisogno solo di tornare e fare una piccola verifica. Il week-end sicuramente aiuterà.

Ciao
Antonio
 
Ciao Marino,

Confermo che tutte le prove effettuate sia con IE tester (fino alla versione IE 7) che su computers con sistema operativo XP e Windows 8 hanno dato un esito positivo. Il contatore svolge il suo compito, correttamente e velocemente, alla fine del popolamento delle Select. Le Select vengono popolate senza alcun errore. Anche la lista delle ruote con immagini viene caricata velocemente.

Direi che tutto funziona egregiamente!

Grazie davvero di tutto!!!!
 
sono contento che insieme siamo riusciti a venire a capo dei problemi,
per chi ci ha seguito, vorrei riepilogare gli oltre 120 post che nelle 3 discussioni, hanno portato a risolvere i diversi problemi,

http://forum.mrwebmaster.it/jquery/...tabase-tramite-query-lanciata-php-jquery.html
http://forum.mrwebmaster.it/ajax/41066-comportamento-anomalo-ie-9-10-a.html
http://forum.mrwebmaster.it/javascript/40581-errato-funzionamento-script-ie-10-ie-tester.html

l'obiettivo iniziale é stato quello di rendere più veloce la risposta del database, quando interrogato con una select con molte join
la struttura del database era ben definita ed é stato facile trovare la soluzione, in prima battuta creando una view che incorporasse le join
senza modifiche alla struttura del db, ottenendo un miglioramento della risposta e come secondo passo, inserendo gli elementi di ricerca della tabella principale,
in alcune tabelle usate come riferimento per guidare gli utenti nelle ricerche stesse,
in questo modo si rendevano disponibili i "puntatori" alla tabella principale che hanno permesso di eliminare le join
con la miglior performance possibile

nel contempo il codice è stato revisionato, migliorando la leggibilità e soprattutto sistemando i tag non perfettamente a posto della pagina html

il codice è stato sviluppato per utilizzare il metodo client/server ed é questa formulazione che ha comportato i maggiori problemi per un corretto funzionamento
nello specifico, alla scelta nei menu a tendina (di base, popolati al caricamento della pagina),
HTML:
<td>
  Applicazione/Application:
  <select id="applicazione" name="applicazione">
    <?php echo $opt->ShowApplicazioni($lng); ?>
  </select> 
</td>
viene attivato il codice javascript con l'intento di popolare altri 8 menu a tendina e quindi, contare i record che verrebbero selezionati nel database con le scelte fatte
HTML:
<td height="50">
  Diametro/Diameter: <label for="Diametro" name="Diametro2" id="Diametro2" > </label> 
  <select name="Diametro" id="Diametro">   
    <option value="0">scegli...</option>
  </select>  
</td>

uno script php é incaricato di recuperare le "option" dal database per popolare i menu a tendina
ed un secondo per il conteggio degli elementi, (il conteggio avviene per ogni scelta fatta nei menu a tendina)

problemi risolti in "questa esperienza",

il metodo POST, usato in origine, è stato sostituito con il metodo GET, perché GET sembra più affidabile,
i parametri vengono passati nell' URL anziché nella "SEND"
PHP:
xmlhttp.open("POST", "characteristics.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send
(
	"funzione="	+ funzione
+	"&id="		+ applic
+	"&id2="		+ comeR
+	"&lng="		+ lang
);

PHP:
var xURL = "characteristics.php?funzione="+funzione+"&id="+applic+"&id2="+comeR+"&lng="+lang
xmlhttp.open("GET", xURL, true);
xmlhttp.send(null);


la cache restituiva lo stesso conteggio dei record pur con "option" diverse selezionate,
ovvero il server non vedendo variazioni della "chiamata", diceva al client di usare i valori presenti nella cache,
sono state aggiunte le ultime cifre del timer nel URL, per rendere la "chiamata" univoca
PHP:
var xURL = "elementscount.php?timestamp=" + (new Date().getTime())%100000
+	"&id="		+ applic
+	"&id2="		+ comeR
+	"&dmt="		+ v_dmt
+	"&suppt="	+ v_suppt ......


il conteggio deve avvenire dopo che tutti i menu a tendina sono stati popolati,
altrimenti non sono disponibili i parametri per la query,
ma il "browser" esegue il codice, in questo caso le chiamate Ajax (Asynchronous Javascript And Xml), nell'ordine che preferisce al momento
é stata utilizzata una soluzione semplice per controllare che il conteggio avvenisse al termine delle altre chiamate,
ovvero, vengono popolate le "<select>" con una riga "attendere" e quando si esegue la funzione di conteggio,
viene controllata la loro presenza per cui la funzione di conteggio viene rieseguita ma ritardata di 0,5 secondi,
con un limite di 15 volte per evitare il blocco/crash del browser (15 é un valore cautelativo)

PHP:
var attendere	= '<option value="-1">Attendere...</option>';

$("select#"+form_tag).html(attendere);

function ContaRecords(i)
{
i++; if (i > 15) { alert('attenzione I > 15'); return false; }
if (
	v_dmt==-1
||	v_suppt==-1
||	v_lamier==-1
||	v_pavt==-1
||	v_vol==-1
||	v_Ruot==-1
||	v_por==-1
||	v_seriesup==-1
) { setTimeout(function () { ContaRecords(i); }, 500); return false; };


ma il problema più consistente é stato capire che i test fatti in ambiente MS IIS 7.5 differivano dall'ambiente operativo (senza possibilità di accesso) gestito con Apache
ovvero IIS restituisce nelle chiamate client/server la "stringa", risultato dell'operazione
Apache restituisce un documento html, in questo secondo caso bisogna estrarre il risultato dal documento,
pena il mancato funzionamento dell'applicazione con browser IE diversi
certo poi la soluzione è semplicissima ... (grazie Antonio)
PHP:
	var n1 = data.indexOf("<option");
	var n2 = data.indexOf("</select>");
	data = data.substring(n1, n2);
}
$(form_tag).html(data);
questo comportamento, farebbe pensare di inserire un tag "personale" di apertura e chiusura della stringa dei dati
in modo da estrarre la stringa correttamente, rendendo tutto indipendente dall'ambiente,
(esempio : #mytag# stringa da restiture #/mytag#)

tutto quanto descritto é riferibile a "questa esperienza", altre situazioni (configurazioni) potrebbero portare risultati diversi
ciao
Marino
 

Discussioni simili