2010-10-31 6 views
0

On suppose que toutes les formes dans votre application a cette structure:AJAX (JQuery) Réponse

<div id="result_messages"></div> 
<form action="/action"> 
<!-- all the form --> 
</form> 

Un bouton de soumission pour cette forme ressemble à ceci:

<input type="button" onclick="$.post('/action', $(form).serialize(), function (data) { 
    $('#result_messages').html(data);  // At this point the 'data' is an standard HTML with a message 
});" /> 

Mais, mais pas toujours la réponse est un message ... comment détecter lorsque les données sont un message ou non ??????:

<input type="button" onclick="$.post('/action', $(form).serialize(), function (data) { 
    if (isMessage(data)) 
     $('#result_messages').html(data);  
    else 
     doActionWith(data); 
});" /> 

en utilisant JSON peut-être une solution:

{ response_type : 'message', data: 'all_data_here' } 

{ response_type : 'nomessage', data: 'all_data_here' } 

Autre solution est de mettre un STRING spécial au début des données:

<!--message--><ul><li>form was processed</li></ul> 

Avez-vous d'autres idées? Que pensez-vous de cette solution?

+1

Que voulez-vous dire «pas toujours un message»? Qu'est-ce que c'est, les autres fois? –

Répondre

0

Quelles sont les options, autres que la simple sortie html? JSON?

Si tel est le cas, vous pouvez renvoyer un objet et le vérifier dans le rappel.

2

Que pensez-vous de cette solutions?

<input type="button" onclick="$.post("/action", $(form).serialize(), function (data) {

  1. Cela va tomber. La citation avant /action mettra fin à la valeur de l'attribut onclick
  2. Inline JS est méchant. Liez vos gestionnaires d'événements à partir de scripts externes.
  3. Si JS n'est pas disponible, cela ne fonctionnera pas. Ecrire un formulaire qui fonctionne (avec un bouton de soumission régulière), puis améliorer progressivement avec JS.
  4. form est non définie, qui devrait être this.form
  5. /action est de vous répéter. Ecrire un code plus réutilisable: this.form.action

En utilisant JSON peut-être une solution

Oui. Utilisez un format de données structuré au lieu d'un blob de code pour pousser dans la page.

+0

tous mes codes pour cette question sont totalement illustratifs ... cela vous aide à comprendre le problème –