2016-10-01 6 views
0

J'ai créé un CFC pour traiter et renvoyer les commentaires postés sur la page de soumission. Il renvoie juste une chaîne JSON du commentaire retourné au navigateur qui est ensuite inséré dans le DOM en utilisant jQuery.Pourquoi ne code pas après que cfreturn s'exécute dans un CFC?

Toutefois, je souhaite également envoyer un courrier électronique pour informer l'auteur qu'un nouveau commentaire a été posté. Je veux faire ceci APRÈS que le JSON ait été retourné au navigateur parce qu'il accélérera l'interface utilisateur plutôt que d'avoir à attendre qu'un email soit envoyé avant de mettre à jour le DOM.

Je suis actuellement en train de tester cela et je ne vois pas que ColdFusion exécutera quoi que ce soit après une balise <cfreturn>. Par exemple, le suivant ne fonctionne pas pour moi:

<cffunction> 
.... 
<cfreturn NewComment/> 
<!--- Anything after the cfreturn above doesn't seem to get executed ---> 
<cfmail to="[email protected]" from="[email protected]"> 
A new comment is available for you to read 
</cfmail> 
</cffuntion> 

Toutefois, ce FONCTIONNE:

<cffunction> 
.... 
<cfmail to="[email protected]" from="[email protected]"> 
A new comment is available for you to read 
</cfmail> 
<cfreturn NewComment/> 
</cffuntion> 

Quel est le problème avec cela et comment pourrais-je obtenir ce que je suis en train de faire? Si je voulais faire beaucoup plus que simplement envoyer un e-mail, alors le DOM aurait attendu beaucoup de temps avant d'être mis à jour, ce qui rend l'expérience de l'utilisateur léthargique.

+5

La réponse du serveur est uniquement envoyée au client une fois le modèle complètement traité. Vous pouvez vider rapidement le tampon de sortie en utilisant '', mais votre approche ressemble plus à un travail pour ''. – Alex

+1

Alex a raison, vous devriez regarder dans cfthread qui vous permet d'exécuter de manière asynchrone du code sur le serveur sans tenir le thread d'origine. Une autre option serait de mettre un enregistrement dans une table de base de données et d'avoir une tâche planifiée envoyer le courriel actuel quelques minutes plus tard. –

Répondre

5

Un retour termine le traitement de la fonction. Rien après un retour n'est pas traité.