0

私は非常に多くのことを試しましたが、これを理解することはできません.

<script type="text/javascript">
$(document).ready(function() {
    $(document.body).on('click', "#reply_submit", function() {
            var formData = $('#reply').serialize();


            $.post("newpost.php",formData, function(data){
                    alert("hi");
             }, "json");
    });

});

私のフォームのIDは「返信」で、送信に使用しているボタンは「返信-送信」です。これらが明確であることを確認するためです。

また、最後の「json」を削除しても機能しません。

4

3 に答える 3

1

ページ全体をリロードせずにフォームを送信したいと思っているだけです。その仮定に基づいて、次のコードが目的を果たします。

$(document).ready(function(){

//on form submit event
$('form#reply').submit(function(){
    $.post('newpost.php',$(this).serialize(),function(){
        alert("Message or do something with the response data if you are expecting one");
    });

    //prevent default action
    return false;   
});

}); 

これがプロジェクトで探している機能でない場合は、投稿を無視してください。

于 2012-03-21T05:09:07.333 に答える
1

jQuery.post()のドキュメントを読むと、コールバックについて次のように書かれています。

success(data, textStatus, jqXHR)
リクエストが成功した場合に実行されるコールバック関数。

呼び出されない場合は、リクエストが成功しなかったことを意味します。おそらくエラーがありますnewpost.php(データ挿入後、正常に終了する前)。

投稿の短縮形の代わりに長い形式のjQuery.ajax()を使用して、エラー状態をキャッチすることもできます。

$.ajax({
    url: 'newpost.php',
    data: formData,
    type: 'post',
    dataType: 'json',
    success: function(data, textStatus, jqXHR) {
        alert('success');
    },
    error: function(jqXHR, textStatus, errorThrown) {
        alert('error!');
    }
});
于 2012-03-21T04:14:35.090 に答える
1

クリックすると、フォームも標準的な方法で送信されます。クリック ハンドラーを次のように変更します。

$(document).on('click', "#reply_submit", function(e) {
  e.preventDefault(); // prevent the default submit event
  var formData = $('#reply').serialize();
  // ...
});

document.bodyjQuery でラップするのに有効なノードであるべきだと思いますが、より一般的に使用される に変更しましたdocument

その点で、フォームが Ajax イベントまたはその他の DOM 変更によって決して破棄されない場合は、 (または)#replyの代わりにバインドできます。documentbody

于 2012-03-21T04:17:54.263 に答える