OVH Cloud OVH Cloud

AJAX

4 réponses
Avatar
Gérard
Bonjour,

voila, je suis en train d'écrire ma première page en utilisant la
technologie AJAX, je suis parti du script proposé par JDN.Solutions:
http://developpeur.journaldunet.com/tutoriel/dht/050406-javascript-ajax-xmlhttprequest-2.shtml

J'y suis presque arrivé (la mise à jour sur le serveur se fait bien
lorsque la requête a été lancée), seul problème, impossible de récupérer
le résultat, je ne passe jamais dans l'état :
http.readyState == 4

Je reste en status 1, jamais de passage dans un état ultérieur :((

Voila le script que j'utilise coté client :


<script type="text/javascript">
function getHTTPObject() {
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}

function handleHttpResponse(id_lien, type_action) {
var id_img, id_lnk, src_img, src_lnk, pps;
// alert ("id_lien = " + id_lien);
pps = "";
id_img = "img_" + id_lien;
id_lnk = "lnk_" + id_lien;

// alert ("id image = " + id_img + " id lnk = " + id_lnk);
// alert ("ready state = " + http.readyState);
if (http.readyState == 4) {
// alert ("Ready stat");
var results = http.responseText;
alert("resultat = " + results);
if (type_action == "plus") {
type_action = "moins";
src_img = pps + "images/logo_moins.jpg";
} else {
type_action = "plus";
src_img = pps + "images/logo_plus.jpg";
}
// alert ("source image = " + src_img);

src_lnk = "javascript:majSelLnk(" + id_lien + ", '" + type_action +
"')";
document.getElementById(id_img).src = src_img;
document.getElementById(id_lnk).href = src_lnk;
}
}

function majSelLnk(id_lien, type_action) {
var lang = "FR";
var url = "ajax_sel_lnk.php?id_lnk=" + id_lien + "&action=" +
type_action + "&lang=" + lang + "&objet=lnk";
http.open("GET", url, true);
http.onreadystatechange = handleHttpResponse(id_lien, type_action);
http.send(null);
}

var http = getHTTPObject();

// fin du script -->
</script>

Merci d'avance de votre aide ...

@++

Gérard
--
---------------------------------------------------------------
http://gerardgrandjean.net
http://gerardgrandjean.net/menu_voyages.php3 Voyages
http://gerardgrandjean.net/page_liens.php3 Liens
http://gerardgrandjean.net/actu.php3 Revue de presse
http://gerardgrandjean.net/menu_rss.php Annuaire RSS

4 réponses

Avatar
Bobe
Gérard nous a dit le 15.10.2005 12:20:

http.onreadystatechange = handleHttpResponse(id_lien, type_action);




Ça, ce n'est pas bon. Vous appelez la fonction handleHttpResponse() et
vous assignez à la propriété onreadystatechange la valeur retournée par
cette fonction.
Le code correct pour assigner un guetteur à un type d'évènement est
celui-ci:

http.onreadystatechange = handleHttpResponse;

Vous devez trouver une alternative pour passer les deux variables
id_lien et type_action.

--
Aurélien Maille

"la vie d'un geek est un combat perpétuel contre l'imperfection"
Avatar
Gérard
Bobe a écrit :
Gérard nous a dit le 15.10.2005 12:20:


http.onreadystatechange = handleHttpResponse(id_lien, type_action);





Ça, ce n'est pas bon. Vous appelez la fonction handleHttpResponse() et
vous assignez à la propriété onreadystatechange la valeur retournée par
cette fonction.
Le code correct pour assigner un guetteur à un type d'évènement est
celui-ci:

http.onreadystatechange = handleHttpResponse;

Vous devez trouver une alternative pour passer les deux variables
id_lien et type_action.



Merci de votre conseil, cela fonctionne à présent.

Seul problème qui reste : IE évidemment !!
Ca ne marche pas du tout, un problème pour instancier l'objet ?
Je sèche !!!

--
---------------------------------------------------------------
http://gerardgrandjean.net
http://gerardgrandjean.net/menu_voyages.php3 Voyages
http://gerardgrandjean.net/page_liens.php3 Liens
http://gerardgrandjean.net/actu.php3 Revue de presse
http://gerardgrandjean.net/menu_rss.php Annuaire RSS
Avatar
Gérard
Gérard a écrit :
Bobe a écrit :

Gérard nous a dit le 15.10.2005 12:20:


http.onreadystatechange = handleHttpResponse(id_lien, type_action);






Ça, ce n'est pas bon. Vous appelez la fonction handleHttpResponse() et
vous assignez à la propriété onreadystatechange la valeur retournée
par cette fonction.
Le code correct pour assigner un guetteur à un type d'évènement est
celui-ci:

http.onreadystatechange = handleHttpResponse;

Vous devez trouver une alternative pour passer les deux variables
id_lien et type_action.



Merci de votre conseil, cela fonctionne à présent.

Seul problème qui reste : IE évidemment !!
Ca ne marche pas du tout, un problème pour instancier l'objet ?
Je sèche !!!



J'ai trouvé : le activeX n'étaient pas autorisés sur mon IE.
Mais comment faire pour détecter si les activex sont activés sur le
poste client ???

--
---------------------------------------------------------------
http://gerardgrandjean.net
http://gerardgrandjean.net/menu_voyages.php3 Voyages
http://gerardgrandjean.net/page_liens.php3 Liens
http://gerardgrandjean.net/actu.php3 Revue de presse
http://gerardgrandjean.net/menu_rss.php Annuaire RSS
Avatar
loufoque
Gérard a dit le 15/10/2005 16:29:

J'ai trouvé : le activeX n'étaient pas autorisés sur mon IE.
Mais comment faire pour détecter si les activex sont activés sur le
poste client ???





if(window.XMLHTTPRequest)
{
truc = new XMLHTTPRequest();
}
else if(window.ActiveXObject)
{
truc = new ActiveXObject('Msxml2.XMLHTTP');
}
else
{
alert('pas d'ajax, va falloir laver ta lessive à la main');
}

On peut aussi faire un try/catch pour vérifier que la création de
l'objet fonctionne.