簡體   English   中英

需要提交兩次表單才能使用jQuery AJAX正確發布

[英]Needing to submit form twice to post correctly using jQuery AJAX

我正在嘗試使用jQuery AJAX提交表單。 我對這段代碼不太滿意,所以看不到

問題 -為什么我需要提交兩次表單才能發布。

當我提交表單時,textarea會清除回placeholder文本,什么也不會發生。 當我再次單擊它時,該帖子將提交並顯示。 我有以下textareabutton

<textarea class="add-message-textarea" name="message_body" id="message_textarea" placeholder="Write message"></textarea>
<button class="post-button button" type="submit" name="post_message" id="message_submit">Post</button>

當我提交時,我有以下內容:

$body = '';
if(isset($_POST['post_message'])) {

    if(isset($_POST['message_body'])) {
        $body = $_POST['message_body'];
    }
}

然后調用AJAX:

var userLoggedIn = '<?php echo $userLoggedIn; ?>';
var user_to      = '<?php echo $user_to; ?>';
var body         = '<?php echo $body; ?>'
// var body          = $("#message_textarea").val();

$(document).ready(function() {

    $("#message_submit").click(function(){

    //ajax request for send 'sending a new message' string to dB
    $.ajax({
        url: "includes/handlers/ajax_send_message.php",
        type: "POST",
        data: {'userLoggedIn':userLoggedIn, 'user_to':user_to, 'body':body},
        cache: true,

                success: function(response) {
                  console.log("message_sent");
                }

        }); 
    });
});

ajax_send_message.php看起來像這樣簡單:

global $con;
if(isset($_POST['userLoggedIn']) && isset($_POST['user_to']) && isset($_POST['body'])) {

    $userLoggedIn = $_POST['userLoggedIn'];
    $body = $_POST['body'];
    $user_to = $_POST['user_to'];
    $date = date("Y-m-d H:i:s");


        $message_obj = new Message($con, $userLoggedIn);
        $message_obj->sendMessage($user_to, $body, $date);
}

我可以使用下面的PHP使它正常工作,但我不希望頁面重新加載。

if(isset($_POST['post_message'])) {

    if(isset($_POST['message_body'])) {
        $body = $_POST['message_body'];
        $date = date("Y-m-d H:i:s");
        $message_obj->sendMessage($user_to, $body, $date);
    }
}

任何幫助表示贊賞。

如果要提交表單但阻止重新加載頁面,則只需單擊提交按鈕返回false即可:

$(document).ready(function() {

    $("#message_submit").click(function(){
   //ajax request for send 'sending a new message' string to dB
    $.ajax({
    url: "includes/handlers/ajax_send_message.php",
    type: "POST",
    data: {'userLoggedIn':userLoggedIn, 'user_to':user_to, 'body':body},
    cache: true,
    success: function(response) {
          console.log("message_sent");
         }

    });

    return false;

    });
});

注意:如果要完全阻止提交表單,請在不單擊按鈕的情況下將事件偵聽器附加到表單提交。 用戶可以通過按Enter或附加在設備鍵盤上的其他不可預期的動作等方式提交表單。

$(YOUR_FORM).on("submit",function(){
  //Ajax code here
  return false;
})

我認為問題在於您不會阻止表單提交。 您可以通過以下方法執行此操作: e.preventDefault() .submit(function(e){})回調函數中的.submit(function(e){})

 $("#reg").submit(function(e) { e.preventDefault(); }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <form id="reg"> <input type="text" name="name" value="Rick"> <input type="text" name="last_name" value="Astley"> <input type="submit"> <form> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM