118 votes

Soumettre le formulaire sans recharger la page

J'ai un site de petites annonces, et sur la page où les annonces sont affichées, je crée un formulaire "Envoyer un conseil à un ami"...

Ainsi, toute personne qui le souhaite peut envoyer une copie de l'annonce à l'adresse électronique d'un ami.

Je suppose que le formulaire doit être soumis à une page php, n'est-ce pas ?

<form name="tip" method="post" action="tip.php">
  Tip somebody: 
  <input 
    name="tip_email"
    type="text" 
    size="30" 
    onfocus="tip_div(1);" 
    onblur="tip_div(2);"
  />
  <input type="submit" value="Skicka Tips" />
  <input type="hidden" name="ad_id" />
</form>

Lors de la soumission du formulaire, la page est rechargée... Je ne veux pas de cela...

Existe-t-il un moyen de faire en sorte qu'il ne se recharge pas et qu'il envoie quand même le courrier ? De préférence sans ajax ou jquery...

7voto

Une autre possibilité consiste à créer un lien javascript direct vers votre fonction :

<form action="javascript:your_function();" method="post">

...

4voto

Tyler Points 153

C'est exactement comme cela que cela peut fonctionner sans jQuery et AJAX et cela fonctionne très bien en utilisant une simple iFrame. J'ADORE, cela fonctionne avec Opera10, FF3 et IE6. Merci à tous ceux qui m'ont indiqué la bonne direction.

<select name="aAddToPage[65654]" 
onchange="
    if (bCanAddMore) {
        addToPage(65654,this);
    }
    else {
        alert('Could not add another, wait until previous is added.'); 
        this.options[0].selected = true;
    };
" />
<option value="">Add to page..</option>
[more options with values here]</select>

<script type="text/javascript">
function addToPage(iProduct, oSelect){
    iPage = oSelect.options[oSelect.selectedIndex].value;
    if (iPage != "") {
        bCanAddMore = false;
        window.hiddenFrame.document.formFrame.iProduct.value = iProduct;
        window.hiddenFrame.document.formFrame.iAddToPage.value = iPage;
        window.hiddenFrame.document.formFrame.submit();
    }
}
var bCanAddMore = true;</script> 

<iframe name="hiddenFrame" style="display:none;" src="frame.php?p=addProductToPage" onload="bCanAddMore = true;"></iframe>

t

if( $_GET['p'] == 'addProductToPage' ){  // hidden form processing
  if(!empty($_POST['iAddToPage'])) {
    //.. do something with it.. 
  }
  print('
    <html>
        <body>
            <form name="formFrame" id="formFrameId" style="display:none;" method="POST" action="frame.php?p=addProductToPage" >
                <input type="hidden" name="iProduct" value="" />
                <input type="hidden" name="iAddToPage" value="" />
            </form>
        </body>
    </html>
  ');
}

4voto

Matas Lesinskas Points 165

Cela devrait résoudre votre problème.
Dans ce code, après avoir cliqué sur le bouton de soumission, nous appelons jquery ajax et nous passons l'url à l'envoi.
type POST/GET
données : informations sur les données que vous pouvez sélectionner dans les champs de saisie ou dans tout autre champ.
sucess : callback si tout est ok depuis le serveur
paramètre de la fonction texte, html ou json, réponse du serveur
En cas de succès, vous pouvez écrire des avertissements si les données que vous avez obtenues sont dans un certain état, etc. ou exécuter votre code pour savoir ce qu'il faut faire ensuite.

<form id='tip'>
Tip somebody: <input name="tip_email" id="tip_email" type="text" size="30" onfocus="tip_div(1);" onblur="tip_div(2);"/>
 <input type="submit" id="submit" value="Skicka Tips"/>
 <input type="hidden" id="ad_id" name="ad_id" />
 </form>
<script>
$( "#tip" ).submit(function( e ) {
    e.preventDefault();
    $.ajax({
        url: tip.php,
        type:'POST',
        data:
        {
            tip_email: $('#tip_email').val(),
            ad_id: $('#ad_id').val()
        },
        success: function(msg)
        {

            alert('Email Sent');
        }               
    });
});
</script>

3voto

wtaniguchi Points 893

Vous pouvez essayer de définir l'attribut cible de votre formulaire dans une iframe cachée, de sorte que la page contenant le formulaire ne soit pas rechargée.

J'ai essayé avec des téléchargements de fichiers (dont nous savons qu'ils ne peuvent pas être effectués via AJAX), et cela a fonctionné à merveille.

2voto

DanC Points 3057

Avez-vous essayé d'utiliser une iFrame ? Pas d'ajax, et la page d'origine ne se chargera pas.

Vous pouvez afficher le formulaire de soumission comme une page séparée à l'intérieur de l'iframe, et lorsqu'il est soumis, la page extérieure/conteneur ne sera pas rechargée. Cette solution n'utilisera aucune forme d'ajax.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X