2009-11-24 3 views
2

Salutations gentilles communauté de développeurs sages !! C'est la première fois que j'écris et j'ai regardé autour mais hélas, je suis coincé et j'ai besoin d'aide. Je serais très reconnaissant à toutes les bonnes âmes qui peuvent aider.Comment ajouter une soumission AJAX invisible sur mon formulaire déclenchée par des mises à jour de champs en entrée, tout en préservant la soumission naturelle?

Ma forme doit faire 2 choses:

1) comportons comme une forme normale, et présenter des lignes de noms de produits, les prix unitaires et les quantités, lorsque ce bouton est enfoncé (ce qui est déjà en place).

2) Proposez les lignes de noms de produits, les prix unitaires et des quantités dans les coulisses (jQuery? AJAX?), Déclenchées par un changement dans l'une des lignes de produit, utilisez alors la réponse JSON mettre à jour un certain affichage sortie au bas de la page. La réponse JSON provient du serveur. Cette URL "action" est différente de celle de (1). J'ai juste besoin de savoir comment configurer les liaisons ou la fonction (s) prête (s) ou l'auditeur (s) ou tout ce que vous les appelez ces jours-ci, pour faire ce travail.

Toute aide serait grandement appréciée et me sauver de l'énorme fosse noire dans laquelle je me bats actuellement.

Merci!

Cheers,

Gene

Répondre

2

Je soumettrais les données d'abord via AJAX puis soumettrait le formulaire normal. Quelque chose comme ça dans jQuery:

<form method="POST" action="action.php" id="myform"> 
<input type="text" name="product_name" value="" /> 
... Other form elements ... 
<input type="submit" id="submit_button" value="Submit" /> 
</form> 

<script> 
$('#myform').submit(function() { 
    // Disable the submit button. 
    $('#submit_button').attr('disabled', 'disabled'); 
    var data = new Array(); 
    ... Iterate form values to submit to secondary action and add to data ... 
    // action2.php also accepts form data, encoded as JSON, XML, etc. 
    $.post('action2.php', data, function() { 
    // Submit the form _for real_ in the callback function. 
    $('#myform').submit(); 
    }); 
    return false; // prevents normal form submission 
}); 
</script> 

Cela donne l'idée approximative de ce qui serait nécessaire. Montrer une animation de 'chargement' pendant la soumission à action2.php serait une bonne idée.

+0

Merci pygorex, je travaille pour l'implémenter maintenant. Toujours essayer de comprendre comment déclencher l'alternative AJAX soumettre. Je te tiendrai au courant. –

+0

Merci Pygorex. Je suis nouveau à jQuery et n'était pas au courant de la capacité de .post. Je me suis rendu compte que je pouvais l'appeler n'importe où et l'envoyer subrepticement le formulaire à une autre URL d'action cible différente de celle "naturelle" du formulaire. J'ai simplifié cet appel alternatif (caché). J'ai essayé de poster mon code dans cette section de commentaires mais ça ne s'affiche pas, donc je vais l'afficher comme réponse. –

0

Cela devrait être facile à faire, mais je vois un gros problème: Envoi de la forme la voie normale conduit à la page en cours de déchargement. Toute demande AJAX émise en même temps pourrait pas encore passé, vous n'avez aucun moyen de le dire.

De plus, lorsque le formulaire est soumis normalement, il n'y aura plus de bas de la page pour afficher quoi que ce soit, étant donné que vous êtes déjà en route vers la page suivante.

Est-il possible de rester sur la même page pour les deux actions? Vous pourriez faire la soumission normale dans un IFRAME invisible par exemple, si vous ne voulez pas l'Ajaxifier.

+0

Salut Pekka et merci pour votre réponse rapide. S'il y avait un système de notation, je vous donnerais 5 étoiles. C'est OK même si l'utilisateur soumet le formulaire "naturellement" et que la requête AJAX n'est pas passée - c'est strictement pour l'affichage seulement et ne fait rien de critique. Donc, oui, il est possible que cela soit interrompu et que l'utilisateur soit envoyé à la page suivante. –

+0

Malheureusement, rester sur la même page n'est pas une option pour la soumission "naturelle" car elle doit passer joyeusement à sa prochaine destination (c'est ainsi que le système fonctionne - soumettre la page Edit pour revenir à la page Listing). –

+0

Alors, avec ces problèmes à l'écart ... y a-t-il une solution?:-) –

0

Cette fonction peut être appelée par le déclencheur onChange() des champs de saisie du formulaire.

<script> 

    function update_subtotals_display() { 

     $.post(
      'update_subtotals_display_action_page.php', // alt action target 
      $('#form').children(), // sends over the form's inputs 
      function(result) { // what to do with the result from the target output 
       alert(result); // rest of it needs to be fleshed out here 
      } 
     ); 

    } 

</script> 
Questions connexes