Ajax : asynchrones?


#1

bonjour,
l’object Ajax.request permet de recevoir plusieurs réponse (Response
being
received (can occur many times, as packets come in)).

Certe mais comment faire pour que rails puisse envoyer plusieur réponse.

ex :
mon traitement 1
response “1er traitement ok”
mon traitement 2
response “2eme traitement ok”

si vous avez une solution merci.


#2

Enchaîner plusieurs call ajax successifs, du genre :

[requete AJAX 1] => [action 1] => [vue RJS 1 avec call AJAX 2] =>
[action 2]
=> …
ou
[requete AJAX 1] => [action 1] => [réponse OK] => [callback AJAX
onSuccess
avec call AJAX 2] => [action 2]

Il y a des variations sur ce thème, mais la constante c’est :
Le serveur ne prendra jamais l’initiative, il faut que ce soit le
client
qui fasse une requête pour otbenir une réponse.

2008/10/8 guillaume belleguic removed_email_address@domain.invalid

response “2eme traitement ok”

si vous avez une solution merci.


Michel B.


#3

J’ai crue comprendre qu’une requête ajax pouvait recevoir plusieur
réponse Ã
la suite, ce n’est pas le cas ?
Bien entendu je voudrais que la méthode de mon controlleur face
“plusieurs”
render (je sais je sais ce n’est pas possible, mais alors pourquoi
Ajax.request peut reçevoir plusieurs réponse ?)

2008/10/8 Michel B. removed_email_address@domain.invalid


#4

2008/10/8 guillaume belleguic removed_email_address@domain.invalid

J’ai crue comprendre qu’une requête ajax pouvait recevoir plusieur réponse
à la suite, ce n’est pas le cas ?
Bien entendu je voudrais que la méthode de mon controlleur face “plusieurs”
render (je sais je sais ce n’est pas possible, mais alors pourquoi
Ajax.request peut reçevoir plusieurs réponse ?)

Ma réponse est à prendre avec recul: je ne suis pas un grand clerc en
Ajax

Pour moi, cela signifie qu’un appel Ajax peut arriver en plusieurs chunk
pour les réponses massives (ou les réseaux lents), mais l’ensemble de
ces
chunks (parties) ne constituent qu’un seul et même message.

HTH


#5

j’étais en train de regardé se dernier point et je me demandais si je
n’avais pas été un peut rapide à répondre.
si vous avez d’autre élément.

En fait je souhaite afficher un message a chaque étape d’un processus
complex.

2008/10/8 ook? ook! removed_email_address@domain.invalid


#6

Effectivement, ta réponse peut arriver en plusieurs parties, surtout
lorsque
tu reçois une réponse très longue. Tu peux “attraper” au vol l’arrivée
d’un
paquet particulier en utilisant la méthode de rappel “onLoad” de tes
calls
AJAX.

Mais :

Tu ne peux pas être sûr de recevoir un morceau “complet” chaque fois que
“onLoad” est activé, ni combien de morceaux tu vas recevoir d’un coup,
ni
quelle proportion de la réponse tu auras reçu, à moins de faire des
bidouilles de haut niveau côté serveur.

Donc en général, ça ne sert pas à grand chose.

Si ton objectif est de chaîner plusieurs actions en un fil dont
l’utilisateur peut suivre la progression, chaîner les requêtes AJAX
unitaires me semble beaucoup plus approprié.

Le 8 octobre 2008 15:53, ook? ook! removed_email_address@domain.invalid a écrit :

Ma réponse est à prendre avec recul: je ne suis pas un grand clerc en Ajax

Pour moi, cela signifie qu’un appel Ajax peut arriver en plusieurs chunk
pour les réponses massives (ou les réseaux lents), mais l’ensemble de ces
chunks (parties) ne constituent qu’un seul et même message.

HTH


Michel B.


#7

en fait j’ai une method create qui fait :1 - j’upload le un fichier
2- j’annonce que le fichier est arrivé
3 - je vérifie que le fichier est conforme au spec
4- j’annonce que le fichier est conforme
5- je traite le fichier
6 - fin de traitment

je voulais resté sur une fonction mais donné des informations Ã
l’utilisateur au fur et a mesure.

2008/10/8 Michel B. removed_email_address@domain.invalid


#8

Le 8 octobre 2008 16:12, guillaume belleguic a écrit :

en fait j’ai une method create qui fait :
1 - j’upload le un fichier
2- j’annonce que le fichier est arrivé
3 - je vérifie que le fichier est conforme au spec
4- j’annonce que le fichier est conforme
5- je traite le fichier
6 - fin de traitment
je voulais resté sur une fonction mais donné des informations à
l’utilisateur au fur et a mesure.

Action chunking ?

http://docs.google.com/View?docid=ddmqwkxs_3972nphr5fk

(sinon on peut faire du push avec des solutions comme Juggernaut [1]
mais c’est plutôt overkill)

-- Jean-François.

[1] Voir :
http://en.oreilly.com/railseurope2008/public/schedule/detail/2573
http://assets.en.oreilly.com/1/event/13/Juggernaut%20_%20Realtime%20Rails%20Presentation.pdf


#9

Action chunking aussi ça me semble un peu overkill dans ce cas précis,
étant
donné qu’il ne s’agit pas vraiment d’actions enchaînées mais d’une seule
action dont certaines étapes peuvent être un peu longues (enfin, surtout
l’upload en fait…).

Le 8 octobre 2008 16:53, Jean-François Trân removed_email_address@domain.invalid a
écrit
:

je voulais resté sur une fonction mais donné des informations Ã

[1] Voir :
http://en.oreilly.com/railseurope2008/public/schedule/detail/2573

http://assets.en.oreilly.com/1/event/13/Juggernaut%20_%20Realtime%20Rails%20Presentation.pdf


Michel B.


#10

Le 8 octobre 2008 16:33, Michel B. a écrit :

ça va te forcer à sortir sérieusement des rails

Ce qui, sur cette mailing-list, relève du sacrilège !

– Jean-François.


Les 50 ans du Lisp : http://www.lisp50.org

http://twitter.com/underflow_


#11

On parle bien d’une opération atomique dont tu veux juste donner
l’avancement.

Dans ce cas il te reste la méthode des envois successifs, ça va te
forcer Ã
sortir sérieusement des rails parce que c’est complètement pas dans
l’esprit
du principe MVC de rails (normalement on ne fait la vue qu’après que le
contrôleur a finit son boulot) et à gérer toi-même les envois successifs
“par paquet” au client. Ce n’est pas impossible, il est même possible
que
quelqu’un ait déjà fait un plugin dans ce sens (et si tu met en place
une
solution de ce genre ce serait bien d’en faire un plugin histoire que ça
ne
soit pas perdu d’un projet à l’autre), mais ça va demander pas mal de
boulot
quand même.

Donc si tu ne veux pas te casser la tête, à ta place je ferais plutôt la
technique de l’illusioniste qui consiste à désactiver l’envoi du
formulaire
du fichier et faire apparaître une magnifique animation d’attente, dans
90%
des cas ça suffit à faire patienter les utilisateurs. Pour les 9% les
plus
nerveux, tu peux ruser en affichant un petit rapport {avec
scriptaculous}
qui fasse un truc du genre :

  1. Votre fichier est bien arrivé ! {avec un petit flash} Je valide
    votre
    fichier… {apparition d’une animation pour faire patienter, pause de
    3-5
    secondes}
  2. Votre fichier à été validé et est conforme aux specs ! {nouveau
    petit
    flash} Je traite le fichier {re-animation, re-pause}
  3. Fin du traitement, merci pour votre patience, votre fichier à été
    traité avec tous les égards qui lui sont dûs {feu d’artifice en forme
    de
    coeur}

De toute façon, si ton action ne peux pas être interrompue du côté du
serveur, qu’est-ce que ça change que l’utilisateur ait un rapport en
temps
réel de ce que fait le serveur ?


Michel B.


#12

Le 8 octobre 2008 17:03, Michel B.
removed_email_address@domain.invalid a écrit :

Action chunking aussi ça me semble un peu overkill dans ce cas précis, étant
donné qu’il ne s’agit pas vraiment d’actions enchaînées

ah bon ?

Guillaume : “En fait je souhaite afficher un message a chaque étape
d’un processus complex.”

  • autre message avec la description : upload, vérification de conformité
    puis traitement du fichier.

mais d’une seule action dont certaines étapes peuvent être un peu
longues (enfin, surtout l’upload en fait…).

On en sait rien, on ne sait pas si le traitement du fichier peut être
long.

De toute manière ,si c’est long les solutions de traitement asynchrone
(BackgrounDRb ou ses copains) ça me semble préférable, mais bon,
c’est l’OP qui fait ce qu’il veut.

-- Jean-François.


Les 50 ans du Lisp : http://www.lisp50.org

http://twitter.com/underflow_


#13

wouaip, BackgrounDRb et un appel ajax periodique pour savoir si cela
avance
? pourquoi pas
je regarde

merci pour vos réponses

2008/10/8 Jean-François Trân removed_email_address@domain.invalid