Gửi biểu mẫu HTML bằng Jquery AJAX


107

Tôi đang cố gắng gửi một biểu mẫu HTML bằng AJAX bằng cách sử dụng ví dụ này .

Mã HTML của tôi:

<form id="formoid" action="studentFormInsert.php" title="" method="post">
    <div>
        <label class="title">First Name</label>
        <input type="text" id="name" name="name" >
    </div>
    <div>
        <label class="title">Name</label>
        <input type="text" id="name2" name="name2" >
    </div>
    <div>
        <input type="submit" id="submitButton"  name="submitButton" value="Submit">
    </div>
</form>

Kịch bản của tôi:

<script type="text/javascript">
    $(document).ready(function() { 
        $('#formoid').ajaxForm(function() { 
            alert("Thank you for your comment!"); 
        }); 
    });
</script>

Điều này không hoạt động, tôi thậm chí không nhận được thông báo cảnh báo và khi tôi gửi, tôi không muốn chuyển hướng đến trang khác, tôi chỉ muốn hiển thị thông báo cảnh báo.

Có một cách đơn giản để làm điều đó?

Tái bút: Tôi có một số lĩnh vực, tôi chỉ lấy hai trường làm ví dụ.


bạn có thể không làm với thành phần html "biểu mẫu"? và sử dụng jquery để đăng bài trên handler bấm nút đi của
harshvchawla

Câu trả lời:


177

Mô tả nhanh về AJAX

AJAX chỉ đơn giản là JSON không đồng bộ hoặc XML (trong hầu hết các tình huống mới hơn là JSON). Vì chúng tôi đang thực hiện tác vụ ASYNC, chúng tôi có thể sẽ cung cấp cho người dùng trải nghiệm UI thú vị hơn. Trong trường hợp cụ thể này, chúng tôi đang thực hiện gửi MẪU bằng AJAX.

Thực sự nhanh chóng có 4 hành động web nói chung GET, POST, PUT, và DELETE; những tương ứng trực tiếp với SELECT/Retreiving DATA, INSERTING DATA, UPDATING/UPSERTING DATA, và DELETING DATA. Biểu mẫu web HTML / ASP.Net mặc định / PHP / Python hoặc bất kỳ formhành động nào khác là "gửi" là hành động ĐĂNG. Bởi vì điều này, tất cả bên dưới sẽ mô tả việc thực hiện một ĐĂNG. Tuy nhiên, đôi khi với http, bạn có thể muốn một hành động khác và có thể sẽ muốn tận dụng .ajax.

Mã của tôi dành riêng cho bạn (được mô tả trong phần nhận xét mã):

/* attach a submit handler to the form */
$("#formoid").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /* get the action attribute from the <form action=""> element */
  var $form = $(this),
    url = $form.attr('action');

  /* Send the data using post with element id name and name2*/
  var posting = $.post(url, {
    name: $('#name').val(),
    name2: $('#name2').val()
  });

  /* Alerts the results */
  posting.done(function(data) {
    $('#result').text('success');
  });
  posting.fail(function() {
    $('#result').text('failed');
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="formoid" action="studentFormInsert.php" title="" method="post">
  <div>
    <label class="title">First Name</label>
    <input type="text" id="name" name="name">
  </div>
  <div>
    <label class="title">Last Name</label>
    <input type="text" id="name2" name="name2">
  </div>
  <div>
    <input type="submit" id="submitButton" name="submitButton" value="Submit">
  </div>
</form>

<div id="result"></div>


Tài liệu

Từ $.posttài liệu trang web jQuery .

Ví dụ : Gửi dữ liệu biểu mẫu bằng yêu cầu ajax

$.post("test.php", $("#testform").serialize());

Ví dụ : Đăng biểu mẫu bằng ajax và đặt kết quả vào một div

<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    </head>
    <body>
        <form action="/" id="searchForm">
            <input type="text" name="s" placeholder="Search..." />
            <input type="submit" value="Search" />
        </form>
        <!-- the result of the search will be rendered inside this div -->
        <div id="result"></div>
        <script>
            /* attach a submit handler to the form */
            $("#searchForm").submit(function(event) {

                /* stop form from submitting normally */
                event.preventDefault();

                /* get some values from elements on the page: */
                var $form = $(this),
                    term = $form.find('input[name="s"]').val(),
                    url = $form.attr('action');

                /* Send the data using post */
                var posting = $.post(url, {
                    s: term
                });

                /* Put the results in a div */
                posting.done(function(data) {
                    var content = $(data).find('#content');
                    $("#result").empty().append(content);
                });
            });
        </script>
    </body>
</html>

Lưu ý quan trọng

Nếu không sử dụng OAuth hoặc tối thiểu HTTPS (TLS / SSL), vui lòng không sử dụng phương pháp này cho dữ liệu an toàn (số thẻ tín dụng, SSN, bất kỳ thứ gì liên quan đến PCI, HIPAA hoặc đăng nhập)


@ abc123 làm cách nào để tôi có thể đặt tiêu đề Yêu cầu ủy quyền trong này? Tôi cố gắng beforeSend: function (xhr) { xhr.setRequestHeader("Authorization", "*****"); xhr.setRequestHeader("contentType", "application/json;charset=UTF-8"); },Nhưng điều này không đặt bất kỳ tiêu đề
Mahendra kawde

@mahendrakawde bạn sẽ cần phải sử dụng $.ajaxmà tôi có thể viết một ví dụ về nếu bạn muốn nhưng điều đó thực sự là một câu hỏi riêng biệt
abc123

@ abc123 tôi đã bắt đầu chủ đề cho điều đó. hãy để tôi chia sẻ nó với bạn.
Mahendra kawde

1
chúng ta có thể tránh sử dụng bài đăng biểu mẫu và chỉ đơn giản thực hiện bài đăng jquery trên trình xử lý nhấp chuột của một nút (là một nút html không phải là một phần của bất kỳ div biểu mẫu nào). Bằng cách này, event.preventdefault cũng sẽ không cần thiết?
harshvchawla

1
@harshvchawla tất nhiên, nhưng sau đó chọn truy vấn của bạn cho các biến kéo từ các yếu tố html là khác nhau
abc123

26
var postData = "text";
      $.ajax({
            type: "post",
            url: "url",
            data: postData,
            contentType: "application/x-www-form-urlencoded",
            success: function(responseData, textStatus, jqXHR) {
                alert("data saved")
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(errorThrown);
            }
        })

1
chức năng thành công / hoàn thành sẽ xảy ra khi cuộc gọi hoàn tất và nó nhận được 200 OK từ máy chủ
Varun S

xin chào tôi đặt: $ (document) .ready (function () {$ ('# formoid'). submit (function () {var postData = "text"; $ .ajax ({type: "post", url: " url ", data: postData, contentType:" studentFormInsert.php ", success: function (responseData, textStatus, jqXHR) {alert (" data đã lưu ")}, error: function (jqXHR, textStatus, errorThrown) {console.log ( errorThrown);}})}); nó không hoạt động thực sự .. cần bất kỳ sửa đổi nào về phía php?
Oliveira

4
ví dụ tốt và được viết tốt, vui lòng đăng một số câu trả lời với nó mặc dù không chỉ là mã ví dụ mà không có giải thích.
abc123

2
Tôi không hiểu làm thế nào để kết nối rằng với hình thức tôi muốn gửi
Piotr Kamoda

Tại sao không có lời giải thích?
Phong phú

3

Nếu bạn thêm:

jquery.form.min.js

Bạn chỉ có thể làm điều này:

<script>
$('#myform').ajaxForm(function(response) {
  alert(response);
});

// this will register the AJAX for <form id="myform" action="some_url">
// and when you submit the form using <button type="submit"> or $('myform').submit(), then it will send your request and alert response
</script>

GHI CHÚ:

Bạn có thể sử dụng $ ('FORM'). Serialize () đơn giản như được đề xuất trong bài đăng ở trên, nhưng điều đó sẽ không hoạt động đối với FILE INPUTS ... ajaxForm () sẽ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.