[AJAX] readystatechange et Explorer
Bonjour à tous.
Bon alors je dois dire que mon problème est très très bizarre et je m'en remet à vos connaissances d'expert pour m'aider.
Le principe: j'ai une page sur laquelle les administrateurs du site peuvent gérer les items, les catégories, les utilisateurs et les magasin.
Pour chaque type, il y a un select qui a en événement onchange une fonction ajax qui permet de remplir le formulaire adjacent avec les données de l'élément sélectionné.
voici le code ajax qui est activé lors de l'événement onchange:
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
| function makeRequest(idsearch, typesearch) {
if (!http_request) {
alert('Erreur AJAX. Mettre à jour votre navigateur.');
return false;
}
if (http_request.readyState==4 || http_request.readyState==0) {
if (typesearch=='shop') {
http_request.onreadystatechange = fillShop;
http_request.open('GET', "searchshop.ags?id="+idsearch, true);
}
else if (typesearch=='user') {
http_request.onreadystatechange = fillUser;
http_request.open('GET', "searchuser.ags?id="+idsearch, true);
}
else if (typesearch=='category') {
http_request.onreadystatechange = fillCategory;
// http_request.onreadystatechange = function() {alert(http_request.readyState);}
http_request.open('GET', "searchcategory.ags?id="+idsearch, true);
}
else if (typesearch=='item') {
http_request.onreadystatechange = fillItem;
http_request.open('GET', "searchitem.ags?id="+idsearch, true);
}
http_request.send(null);
}
}
function fillShop() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
document.getElementById("nameShop").value=http_request.responseText;
} else {
alert('There was a problem with the request.');
}
}
}
function fillCategory() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
document.getElementById("nameCategory").value=http_request.responseText;
} else {
alert('There was a problem with the request.');
}
}
else {
// alert(http_request.readyState);
}
}
function fillUser() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var parser=new DOMImplementation();
var xmlDoc=parser.loadXML(http_request.responseText);
var shopNode = xmlDoc.getElementsByTagName('user').item(0).getChildNodes();
document.getElementById("nameUser").value=shopNode.item(0).getChildNodes();
document.getElementById("passUser").value=shopNode.item(1).getChildNodes();
document.getElementById("shopUser").value=shopNode.item(2).getChildNodes();
document.getElementById("adminUser").checked=(shopNode.item(3).getChildNodes()==1);
}
else {
alert('There was a problem with the request.');
}
}
}
function fillItem() {
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var parser=new DOMImplementation();
var xmlDoc=parser.loadXML(http_request.responseText);
var itemNode = xmlDoc.getElementsByTagName('item').item(0).getChildNodes();
document.getElementById("barcodeItem").value=itemNode.item(0).getChildNodes();
document.getElementById("nameItem").value=itemNode.item(1).getChildNodes();
document.getElementById("categoryItem").value=itemNode.item(2).getChildNodes();
document.getElementById("priceItem").value=itemNode.item(3).getChildNodes();
}
else {
alert('There was a problem with the request.');
}
}
} |
Sous firefox, tout ce passe comme prévu ça marche parfaitement.
Sous explorer, ça ne marche que la première fois. après ça ne marche plus.
Alors j'ai fait des test en affichant des alert('ok'); sous différentes parties du code.
J'ai fait les constations suivante:
- A chaque changement de la liste, la méthode makerequest effectue bel et bien les opération demandée
- après le 1er appel, la fonction définie en "onreadystatechange" n'est plus rappelé
c'est très bizarre.
Quelqu'un a une idée???
Merci d'avance