Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/03/2008, 10h14   #1
Invité régulier
 
Inscription : mars 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 16
Points : 6
Points : 6
Par défaut Pb de compatibilité firefox / IE6

Bonjour à tous,

J'ai développé une interface qui est composé d'un tableau dans lequel un utilisateur peut cocher ou décocher (par des checkbox) des lignes. Lors de l'évènement onClick sur une checkbox un script javascript est appelé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function updateMask(obj, profile, object_id, object_type) {
	// we get the value of "checked" attribut of input
	var state = obj.checked; 
	var old_state = 't';
	if(state) {
		old_state = 'f';
	}
	//alert("state = " + state + " et old_state = " + old_state);
 
	if(XHR && XHR.readyState != 0) {
		XHR.abort();
		delete XHR;
	}
 
	XHR = getXMLHTTP();
 
	if(!XHR) {
		return false;
	}
 
	document.getElementById("waiting").className = "enable";
 
	url = "?action=ajax_submit_control&profile=" + profile + "&object_id=" + object_id + "&object_type=" + object_type + "&checkstate=" + old_state + ieTrick();
	XHR.open("GET", url, true);
	XHR.onreadystatechange = function() {
		if(XHR.readyState == 4) {
 
			if(state) obj.setAttribute("checked", false);
			else obj.setAttribute("checked", true);
			document.getElementById("waiting").className = "disable";
		}
	}
 
	XHR.send(null);
	return;
}
Ce script me permet de mettre à jour une base de données. Ce script fonctionne sous firefox et IE. Le problème vient après.
Comme je peux avoir plus de 1000 lignes dans le tableau, j'ai écrit une autre fonction javascript qui permet, lorsqu'on clique sur le lien "select all" de sélectionner toutes les cases non cochées et de les ajouter à la base de données (en appelant le script précédent).
Et Là j'ai un problème, ca marche sous firefox mais pas sous IE (version 6).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
function selectAllByProfile(obj, profile, object_type) {
	result = confirm("Do you really want to select all items ?");
	if(result) {
		id_list = document.getElementsByName("id[]");
		checkbox_list = document.getElementsByName(profile + "[]");
		for(i=0; i<checkbox_list.length; i++) {
			if(! checkbox_list.item(i).checked) {
				checkbox_list.item(i).setAttribute("checked", true);
				object_id = id_list.item(i).value;
				updateMask(checkbox_list.item(i), profile, object_id, object_type);
			}
		}
		return true;
	}
	return false;
}
Merci pour votre aide.
bioinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 10h24   #2
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
C'est quoi l'erreur exactement? ^^
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 10h37   #3
Invité régulier
 
Inscription : mars 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 16
Points : 6
Points : 6
Ah oui, pardon !
Sous IE 6 lorsque je clique sur "select all", aucune checkbox n'est cochée et rien n'a été mise à jour dans la base de donnée et pourtant le script est bien exécuté. Ah si une chose bizarre se produit les deux dernières checkbox (ou deux dernières lignes du tableau c'est pareil) sont affichées cochées mais rien dans la BD.
bioinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 11h00   #4
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
T'as essayé d'exécuter ta fonction sur un nombre plus restreint de checkbox?

J'ai remarqué qu'IE a un comportement hasardeux sur les grandes quantités de donnée, peut être qu'il apprécie pas de faire 1000 fois la même chose ^^
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 11h07   #5
Modérateur
 
Avatar de DoubleU
 
Inscription : janvier 2006
Messages : 1 107
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 1 107
Points : 1 118
Points : 1 118
Regarde aussi peut etre de ce coté .
DoubleU est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2008, 13h44   #6
Invité régulier
 
Inscription : mars 2005
Messages : 16
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 16
Points : 6
Points : 6
J'ai regardé le code qu'il utilise dans le lien que tu m'as donné et il me semble que mon code tourne de la meme facon.
J'ai ajouté le test suivant au début de la fonction updateMask() :
si navigateur = IE alors l'objet XMLHttprequest = null

et bien ca marche sauf que maintenant mon message d'attente qui doit s'affiche pendant le traitement puis disparaitre à la fin, ne disparait plus.

De plus depuis aujourd'hui, en fait, Firefox traite mal le gros (tout est relatif) volume de données. Par moment la réutilisation de XHR échoue (= une requete en écrase une autre) comme sous IE6. Je vais donc me replonger dans la doc pour bien comprendre l'objet XHR et son comportement.

Mais si quelqu'un a une astuce ... ce serait génial.
bioinfo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h57.


 
 
 
 
Partenaires

Hébergement Web