Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > Prototype & Script.aculo.us
Prototype & Script.aculo.us Forum d'entraide sur les frameworks Prototype et Script.aculo.us
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 12/04/2011, 16h50   #1
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : août 2004
Messages : 24
Points : 10
Points : 10
Envoyer un message via Yahoo à zebulon90
Par défaut Retour Ajax.Request trop rapide ?

Bonjour à tous,

Je viens vous voir car je cale sur un bout de code pourtant pas si compliqué...

Situation :
J'appelle via Ajax.Request une page PHP qui m'update une valeur dans une base et me renvoie une valeur à afficher dans un tableau (il s'agit en faire d'un tableau faisant du "In-Place Editing").

Voici ce que je me renvoie au format JSON :
Code :
1
2
3
4
{
"formID":"123486354_info",
"update":"test"
}
format JSON défini grâce à :
Code :
1
2
header('Cache-Control: no-cache, must-revalidate');
header('Content-type: application/json');
Donc ces données sont toute simple et apparemment bien créées (tests effectués en appelant la page en direct).

Voici le bout de code Javascript qui me permet d'envoyer la requête et de récupérer les infos voulues et updater mon tableau :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  $(selID).observe('change',function(id){
    //AJAX Request creation
    var req = new Ajax.Request('request/req_rh_gestion_info.php',{
      method: 'post',
      parameters: $('chgtForm').serialize() + '&selID=' + selID,
      onSuccess:  function(r){
        alert ('ok !');
        rArray=r.responseText.evalJSON();
        alert(rArray.formID + ' / ' + rArray.update);
        $(rArray.formID).update(rArray.update);
      },
      onFailure: function(r) {alert('erreur de réception du JSON');}
    });
  });
L'execution du Ajax.request est effectué correctement, les données sont envoyées à la page 'request/req_rh_gestion_info.php' qui fait bien son traitement et renvoie le fichier JSON correctement monté.

Maintenant, mon problème qui se situe dans le onSuccess:

- Si j'exécute ce code normalement, l'alerte 'ok !' (ligne 7) s'affiche mais le reste non => le evalJSON n'a pas l'air de fonctionner et ma page se recharge seule avec des données en GET (données correspondant au $('chgtForm').serialize() envoyé en entrée).

- Par contre, si je débug via Firebug en posant des temps d'arrêt sur les lignes 7 à 10, alors là je récupère correctement les données de l'evalJSON et tout se passe bien !

Donc je dois apparemment poser une tempo quelque par pour que l'evalJSON puisse se faire normalement mais je ne sais pas vraiment comment m'y prendre, et surtout j'aimerais savoir si c'est normal d'avoir un tel comportement ?

Bref, si vous pouviez m'éclairer, vous m'ôteriez une belle épine du pied...

Merci d'avance pour vos réponses, même non constructives
zebulon90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 11h13   #2
Membre confirmé
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2005
Messages : 180
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2005
Messages : 180
Points : 231
Points : 231
Je ne suis pas un spécialiste de php, mais normalement le success se termine quand le service/servlet invoqué rend une réponse. Donc vu les symptomes que tu décris je regarderais plutot du côté php que du côté javascript, le serveur renverrai ptet une première réponse trop tôt.

Autrement pour la tempo tu peux utiliser la fonction suivante :

Code :
1
2
3
window.setTimeout(function() {   
		         $(basic).innerHTML = "Sauvegarde en cours"  
		     } ,1000);
macumba 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 03h00.


 
 
 
 
Partenaires

Hébergement Web