7

私は次のようなフォームを持っています:

<form method="post" action="mail.php" id="myForm">
   <input type="text" name="fname">
   <input type="text" name="lname">
   <input type="text" name="email">
    <input type="submit">
</form>

mail.php私はAJAXを初めて使用します。ユーザーが送信ボタンをクリックしたときに、ページを更新せずにスクリプトをバックグラウンドで実行したいと考えています。

以下のコードのようなものを試しましたが、それでも以前と同じようにフォームを送信しているようで、(舞台裏で)必要なものではありません。

$.post('mail.php', $('#myForm').serialize());

可能であれば、AJAXを使用してこれを実装するためのヘルプが必要です。

よろしくお願いします

4

8 に答える 8

10

デフォルトのアクション (実際の送信) を防ぐ必要があります。

$(function() {
    $('form#myForm').on('submit', function(e) {
        $.post('mail.php', $(this).serialize(), function (data) {
            // This is executed when the call to mail.php was succesful.
            // 'data' contains the response from the request
        }).error(function() {
            // This is executed when the call to mail.php failed.
        });
        e.preventDefault();
    });
});
于 2013-01-09T12:53:42.243 に答える
4

完全なコードを提供していませんが$.post()、フォームの送信時に実行しているが、デフォルトの動作を停止していないことが問題のようです。これを試して:

$('#myForm').submit(function(e) {
    e.preventDefault();
    $.post('mail.php', $('#myForm').serialize());
});
于 2013-01-09T12:52:45.370 に答える
3
/**
 * it's better to always use the .on(event, context, callback) instead of the .submit(callback) or .click(callback)
 * for explanation why, try googling event delegation.
 */

//$("#myForm").on('submit', callback) catches the submit event of the #myForm element and triggers the callbackfunction
$("#myForm").on('submit', function(event, optionalData){
    /*
     * do ajax logic  -> $.post is a shortcut for the basic $.ajax function which would automatically set the method used to being post
     * $.get(), $.load(), $.post() are all variations of the basic $.ajax function with parameters predefined like 'method' used in the ajax call (get or post)
     * i mostly use the $.ajax function so i'm not to sure extending the $.post example with an addition .error() (as Kristof Claes mentions) function is allowed
     */
    //example using post method
    $.post('mail.php', $("#myForm").serialize(), function(response){
        alert("hey, my ajax call has been complete using the post function and i got the following response:" + response);
    })
    //example using ajax method
    $.ajax({
        url:'mail.php',
        type:'POST',
        data: $("#myForm").serialize(),
        dataType: 'json', //expects response to be json format, if it wouldn't be, error function will get triggered
        success: function(response){
            alert("hey, my ajax call has been complete using the ajax function and i got the following response in json format:" + response);
        },
        error: function(response){
            //as far as i know, this function will only get triggered if there are some request errors (f.e: 404) or if the response is not in the expected format provided by the dataType parameter
            alert("something went wrong");
        }
    })
    //preventing the default behavior when the form is submit by
    return false;
    //or
    event.preventDefault();
})
于 2013-01-09T13:12:42.680 に答える
2

これを試して:

$(function () {
    $('form').submit(function () {
        if ($(this).valid()) {
            $.ajax({
                url: this.action,
                type: this.method,
                data: $(this).serialize(),
                success: function (result) {
                    $('#result').html(result);
                }
            });
        }
        return false;
    });
});
于 2013-01-09T13:00:30.510 に答える
0

これを試して..

<form method="post" action="mail.php" id="myForm" onsubmit="return false;">

また

追加

e.preventDefault();あなたのclick機能で

 $(#yourselector).click(function(e){
      $.post('mail.php', $(this).serialize());
      e.preventDefault();
 })
于 2013-01-09T12:53:14.823 に答える
-1

JQuery Postのドキュメントをご覧ください。それはあなたを助けるはずです。

于 2013-01-09T12:57:10.033 に答える