Ví dụ POST của Ajax Ajax với PHP


682

Tôi đang cố gắng gửi dữ liệu từ một biểu mẫu đến cơ sở dữ liệu. Đây là mẫu tôi đang sử dụng:

<form name="foo" action="form.php" method="POST" id="foo">
    <label for="bar">A bar</label>
    <input id="bar" name="bar" type="text" value="" />
    <input type="submit" value="Send" />
</form>

Cách tiếp cận thông thường sẽ là gửi biểu mẫu, nhưng điều này khiến trình duyệt chuyển hướng. Sử dụng jQuery và Ajax , có thể thu thập tất cả dữ liệu của biểu mẫu và gửi nó tới tập lệnh PHP (ví dụ, form.php ) không?


3
Xem thảo luận meta liên quan để lý luận đằng sau undeletion.
TRiG

Giải pháp vanilla js đơn giản: stackoverflow.com/a/57285063/7910454
leo núi

Câu trả lời:


939

Cách sử dụng cơ bản .ajaxsẽ trông giống như thế này:

HTML:

<form id="foo">
    <label for="bar">A bar</label>
    <input id="bar" name="bar" type="text" value="" />

    <input type="submit" value="Send" />
</form>

jQuery:

// Variable to hold request
var request;

// Bind to the submit event of our form
$("#foo").submit(function(event){

    // Prevent default posting of form - put here to work in case of errors
    event.preventDefault();

    // Abort any pending request
    if (request) {
        request.abort();
    }
    // setup some local variables
    var $form = $(this);

    // Let's select and cache all the fields
    var $inputs = $form.find("input, select, button, textarea");

    // Serialize the data in the form
    var serializedData = $form.serialize();

    // Let's disable the inputs for the duration of the Ajax request.
    // Note: we disable elements AFTER the form data has been serialized.
    // Disabled form elements will not be serialized.
    $inputs.prop("disabled", true);

    // Fire off the request to /form.php
    request = $.ajax({
        url: "/form.php",
        type: "post",
        data: serializedData
    });

    // Callback handler that will be called on success
    request.done(function (response, textStatus, jqXHR){
        // Log a message to the console
        console.log("Hooray, it worked!");
    });

    // Callback handler that will be called on failure
    request.fail(function (jqXHR, textStatus, errorThrown){
        // Log the error to the console
        console.error(
            "The following error occurred: "+
            textStatus, errorThrown
        );
    });

    // Callback handler that will be called regardless
    // if the request failed or succeeded
    request.always(function () {
        // Reenable the inputs
        $inputs.prop("disabled", false);
    });

});

Lưu ý: Kể từ jQuery 1.8, .success(), .error().complete()đang phản đối ủng hộ .done(), .fail().always().

Lưu ý: Hãy nhớ rằng đoạn mã trên phải được thực hiện sau khi DOM sẵn sàng, vì vậy bạn nên đặt nó trong một $(document).ready()trình xử lý (hoặc sử dụng tốc $()ký).

Mẹo: Bạn có thể xâu chuỗi các trình xử lý gọi lại như thế này:$.ajax().done().fail().always();

PHP (nghĩa là, form.php):

// You can access the values posted by jQuery.ajax
// through the global variable $_POST, like this:
$bar = isset($_POST['bar']) ? $_POST['bar'] : null;

Lưu ý: Luôn vệ sinh dữ liệu đã đăng , để tránh tiêm và mã độc khác.

Bạn cũng có thể sử dụng tốc ký .postthay cho .ajaxmã JavaScript ở trên:

$.post('/form.php', serializedData, function(response) {
    // Log the response to the console
    console.log("Response: "+response);
});

Lưu ý: Mã JavaScript ở trên được tạo để hoạt động với jQuery 1.8 trở lên, nhưng mã này sẽ hoạt động với các phiên bản trước xuống jQuery 1.5.


6
Đã chỉnh sửa câu trả lời của bạn để sửa lỗi: requestđược khai báo là var cục bộ khiến cho if (request) request.abort();không bao giờ hoạt động.
Andrey Mikhaylov - lolmaus

23
Một lưu ý RẤT QUAN TRỌNG, bởi vì tôi đã dành / lãng phí / đầu tư rất nhiều thời gian để cố gắng sử dụng ví dụ này. Bạn cần liên kết sự kiện bên trong khối $ (tài liệu). Đã có HOẶC tải FORM trước khi liên kết được thực thi. Mặt khác, bạn dành rất nhiều thời gian để cố gắng tìm hiểu TẠI SAO địa ngục không ràng buộc.
Philibert Perusse

3
@PhilibertPerusse Giống như với bất kỳ ràng buộc sự kiện nào, rõ ràng bạn cần phần tử tồn tại trong DOM trước khi cố gắng liên kết với nó hoặc nếu bạn sử dụng liên kết được ủy quyền.
mekwall

10
Vâng, tôi hiểu điều đó bây giờ. Nhưng tôi đã tìm thấy nhiều ví dụ luôn đặt một khối $ (tài liệu). Đã sẵn sàng để ví dụ này được khép kín. Tôi đã viết bình luận cho một người dùng trong tương lai, người có thể, như tôi, vấp phải điều này và cuối cùng đọc chủ đề bình luận và 'mẹo' cho người mới bắt đầu này
Philibert Perusse

5
Nếu bạn đang áp dụng điều này cho mã của riêng mình, hãy lưu ý rằng các thuộc tính 'name' rất quan trọng đối với các đầu vào nếu không serialize()sẽ bỏ qua chúng.
Ben Flynn

216

Để thực hiện một yêu cầu Ajax bằng jQuery, bạn có thể thực hiện điều này bằng đoạn mã sau.

HTML:

<form id="foo">
    <label for="bar">A bar</label>
    <input id="bar" name="bar" type="text" value="" />
    <input type="submit" value="Send" />
</form>

<!-- The result of the search will be rendered inside this div -->
<div id="result"></div>

JavaScript:

Phương pháp 1

 /* Get from elements values */
 var values = $(this).serialize();

 $.ajax({
        url: "test.php",
        type: "post",
        data: values ,
        success: function (response) {

           // You will get response from your PHP page (what you echo or print)
        },
        error: function(jqXHR, textStatus, errorThrown) {
           console.log(textStatus, errorThrown);
        }
    });

Cách 2

/* Attach a submit handler to the form */
$("#foo").submit(function(event) {
    var ajaxRequest;

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

    /* Clear result div*/
    $("#result").html('');

    /* Get from elements values */
    var values = $(this).serialize();

    /* Send the data using post and put the results in a div. */
    /* I am not aborting the previous request, because it's an
       asynchronous request, meaning once it's sent it's out
       there. But in case you want to abort it you can do it
       by abort(). jQuery Ajax methods return an XMLHttpRequest
       object, so you can just use abort(). */
       ajaxRequest= $.ajax({
            url: "test.php",
            type: "post",
            data: values
        });

    /*  Request can be aborted by ajaxRequest.abort() */

    ajaxRequest.done(function (response, textStatus, jqXHR){

         // Show successfully for submit message
         $("#result").html('Submitted successfully');
    });

    /* On failure of request this function will be called  */
    ajaxRequest.fail(function (){

        // Show error
        $("#result").html('There is error while submit');
    });

Các .success(), .error()và các .complete()cuộc gọi lại không được chấp nhận kể từ jQuery 1.8 . Để chuẩn bị mã của bạn để loại bỏ cuối cùng của họ, sử dụng .done(), .fail().always()để thay thế.

MDN: abort(). Nếu yêu cầu đã được gửi đi, phương thức này sẽ hủy bỏ yêu cầu.

Vì vậy, chúng tôi đã gửi thành công yêu cầu Ajax và giờ là lúc lấy dữ liệu về máy chủ.

PHP

Khi chúng tôi thực hiện một yêu cầu POST trong một cuộc gọi Ajax ( type: "post"), bây giờ chúng tôi có thể lấy dữ liệu bằng cách sử dụng $_REQUESThoặc $_POST:

  $bar = $_POST['bar']

Bạn cũng có thể xem những gì bạn nhận được trong yêu cầu POST bằng cách đơn giản. BTW, đảm bảo rằng $_POSTđược thiết lập. Nếu không, bạn sẽ nhận được một lỗi.

var_dump($_POST);
// Or
print_r($_POST);

Và bạn đang chèn một giá trị vào cơ sở dữ liệu. Hãy chắc chắn rằng bạn đang nhạy cảm hoặc thoát tất cả các yêu cầu (cho dù bạn đã thực hiện GET hoặc POST) trước khi thực hiện truy vấn. Tốt nhất sẽ được sử dụng báo cáo chuẩn bị .

Và nếu bạn muốn trả lại bất kỳ dữ liệu nào cho trang, bạn có thể làm điều đó bằng cách chỉ lặp lại dữ liệu đó như bên dưới.

// 1. Without JSON
   echo "Hello, this is one"

// 2. By JSON. Then here is where I want to send a value back to the success of the Ajax below
echo json_encode(array('returned_val' => 'yoho'));

Và sau đó bạn có thể có được nó như sau:

 ajaxRequest.done(function (response){
    alert(response);
 });

Có một vài phương pháp tốc ký . Bạn có thể sử dụng mã dưới đây. Nó làm công việc tương tự.

var ajaxRequest= $.post("test.php", values, function(data) {
  alert(data);
})
  .fail(function() {
    alert("error");
  })
  .always(function() {
    alert("finished");
});

Thanh @Clarence là tên văn bản loại đầu vào và vì tôi đang kiện phương thức bài đăng nên $ _POST ['bar'] được sử dụng để lấy giá trị của nó
NullPoiиteя

4
Đối với bất kỳ ai muốn sử dụng json - trong khi sử dụng JSON, cuộc gọi phải chứa tham số dataType: 'json'
K. Kilian Lindberg

4
@CarlLindberg - Điều gì sẽ xảy ra nếu bạn muốn jQuery đoán dựa trên loại phản hồi MIME (đây là điều nên làm khi bạn không đặt dataType), để bạn có thể chấp nhận JSON hoặc một số định dạng khác?
nnnnnn

@nnnnnn bạn đúng - cách đó tốt hơn - thực sự là mặc định: Đoán thông minh
K. Kilian Lindberg

Để truy cập đối tượng phản hồi JSON (data.returned_val), đừng quên bao gồm dataType: "json" trong cuộc gọi ajax ban đầu của bạn
Adelmar

56

Tôi muốn chia sẻ một cách chi tiết về cách đăng bài với PHP + Ajax cùng với các lỗi bị lỗi do lỗi.

Trước hết, tạo hai tệp, ví dụ form.phpprocess.php.

Trước tiên chúng tôi sẽ tạo một formcái mà sau đó sẽ được gửi bằng jQuery .ajax()phương thức. Phần còn lại sẽ được giải thích trong các ý kiến.


form.php

<form method="post" name="postForm">
    <ul>
        <li>
            <label>Name</label>
            <input type="text" name="name" id="name" placeholder="Bruce Wayne">
            <span class="throw_error"></span>
            <span id="success"></span>
       </li>
   </ul>
   <input type="submit" value="Send" />
</form>


Xác thực biểu mẫu bằng cách sử dụng xác thực phía máy khách jQuery và truyền dữ liệu tới process.php.

$(document).ready(function() {
    $('form').submit(function(event) { //Trigger on form submit
        $('#name + .throw_error').empty(); //Clear the messages first
        $('#success').empty();

        //Validate fields if required using jQuery

        var postForm = { //Fetch form data
            'name'     : $('input[name=name]').val() //Store name fields value
        };

        $.ajax({ //Process the form using $.ajax()
            type      : 'POST', //Method type
            url       : 'process.php', //Your form processing file URL
            data      : postForm, //Forms name
            dataType  : 'json',
            success   : function(data) {
                            if (!data.success) { //If fails
                                if (data.errors.name) { //Returned if any error from process.php
                                    $('.throw_error').fadeIn(1000).html(data.errors.name); //Throw relevant error
                                }
                            }
                            else {
                                    $('#success').fadeIn(1000).append('<p>' + data.posted + '</p>'); //If successful, than throw a success message
                                }
                            }
        });
        event.preventDefault(); //Prevent the default submit
    });
});

Bây giờ chúng ta sẽ xem xét process.php

$errors = array(); //To store errors
$form_data = array(); //Pass back the data to `form.php`

/* Validate the form on the server side */
if (empty($_POST['name'])) { //Name cannot be empty
    $errors['name'] = 'Name cannot be blank';
}

if (!empty($errors)) { //If errors in validation
    $form_data['success'] = false;
    $form_data['errors']  = $errors;
}
else { //If not, process the form, and return true on success
    $form_data['success'] = true;
    $form_data['posted'] = 'Data Was Posted Successfully';
}

//Return the data back to form.php
echo json_encode($form_data);

Các tệp dự án có thể được tải xuống từ http://projects.decodingweb.com/simple_ajax_form.zip .


27

Bạn có thể sử dụng nối tiếp. Dưới đây là một ví dụ.

$("#submit_btn").click(function(){
    $('.error_status').html();
        if($("form#frm_message_board").valid())
        {
            $.ajax({
                type: "POST",
                url: "<?php echo site_url('message_board/add');?>",
                data: $('#frm_message_board').serialize(),
                success: function(msg) {
                    var msg = $.parseJSON(msg);
                    if(msg.success=='yes')
                    {
                        return true;
                    }
                    else
                    {
                        alert('Server error');
                        return false;
                    }
                }
            });
        }
        return false;
    });

2
$.parseJSON()là một cứu cánh tổng thể, cảm ơn. Tôi đã gặp khó khăn trong việc diễn giải đầu ra của tôi dựa trên các câu trả lời khác.
foochow

21

HTML :

    <form name="foo" action="form.php" method="POST" id="foo">
        <label for="bar">A bar</label>
        <input id="bar" class="inputs" name="bar" type="text" value="" />
        <input type="submit" value="Send" onclick="submitform(); return false;" />
    </form>

JavaScript :

   function submitform()
   {
       var inputs = document.getElementsByClassName("inputs");
       var formdata = new FormData();
       for(var i=0; i<inputs.length; i++)
       {
           formdata.append(inputs[i].name, inputs[i].value);
       }
       var xmlhttp;
       if(window.XMLHttpRequest)
       {
           xmlhttp = new XMLHttpRequest;
       }
       else
       {
           xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
       }
       xmlhttp.onreadystatechange = function()
       {
          if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
          {

          }
       }
       xmlhttp.open("POST", "insert.php");
       xmlhttp.send(formdata);
   }

18

Tôi sử dụng cách hiển thị dưới đây. Nó gửi mọi thứ như tập tin.

$(document).on("submit", "form", function(event)
{
    event.preventDefault();

    var url  = $(this).attr("action");
    $.ajax({
        url: url,
        type: 'POST',
        dataType: "JSON",
        data: new FormData(this),
        processData: false,
        contentType: false,
        success: function (data, status)
        {

        },
        error: function (xhr, desc, err)
        {
            console.log("error");
        }
    });
});

14

Nếu bạn muốn gửi dữ liệu bằng jQuery Ajax thì không cần thẻ biểu mẫu và nút gửi

Thí dụ:

<script>
    $(document).ready(function () {
        $("#btnSend").click(function () {
            $.ajax({
                url: 'process.php',
                type: 'POST',
                data: {bar: $("#bar").val()},
                success: function (result) {
                    alert('success');
                }
            });
        });
    });
</script>

<label for="bar">A bar</label>
<input id="bar" name="bar" type="text" value="" />
<input id="btnSend" type="button" value="Send" />

10
<script src="http://code.jquery.com/jquery-1.7.2.js"></script>
<form method="post" id="form_content" action="Javascript:void(0);">
    <button id="desc" name="desc" value="desc" style="display:none;">desc</button>
    <button id="asc" name="asc"  value="asc">asc</button>
    <input type='hidden' id='check' value=''/>
</form>

<div id="demoajax"></div>

<script>
    numbers = '';
    $('#form_content button').click(function(){
        $('#form_content button').toggle();
        numbers = this.id;
        function_two(numbers);
    });

    function function_two(numbers){
        if (numbers === '')
        {
            $('#check').val("asc");
        }
        else
        {
            $('#check').val(numbers);
        }
        //alert(sort_var);

        $.ajax({
            url: 'test.php',
            type: 'POST',
            data: $('#form_content').serialize(),
            success: function(data){
                $('#demoajax').show();
                $('#demoajax').html(data);
                }
        });

        return false;
    }
    $(document).ready(function_two());
</script>

sự khác biệt id giữa bạn và câu trả lời khác?
NullPoiиteя

11
nó được đăng bởi tôi những người khác là bởi những người khác ,.
john

6

Xử lý các lỗi và trình tải Ajax trước khi gửi và sau khi gửi thành công hiển thị hộp khởi động cảnh báo với một ví dụ:

var formData = formData;

$.ajax({
    type: "POST",
    url: url,
    async: false,
    data: formData, // Only input
    processData: false,
    contentType: false,
    xhr: function ()
    {
        $("#load_consulting").show();
        var xhr = new window.XMLHttpRequest();

        // Upload progress
        xhr.upload.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = (evt.loaded / evt.total) * 100;
                $('#addLoad .progress-bar').css('width', percentComplete + '%');
            }
        }, false);

        // Download progress
        xhr.addEventListener("progress", function (evt) {
            if (evt.lengthComputable) {
                var percentComplete = evt.loaded / evt.total;
            }
        }, false);
        return xhr;
    },
    beforeSend: function (xhr) {
        qyuraLoader.startLoader();
    },
    success: function (response, textStatus, jqXHR) {
        qyuraLoader.stopLoader();
        try {
            $("#load_consulting").hide();

            var data = $.parseJSON(response);
            if (data.status == 0)
            {
                if (data.isAlive)
                {
                    $('#addLoad .progress-bar').css('width', '00%');
                    console.log(data.errors);
                    $.each(data.errors, function (index, value) {
                        if (typeof data.custom == 'undefined') {
                            $('#err_' + index).html(value);
                        }
                        else
                        {
                            $('#err_' + index).addClass('error');

                            if (index == 'TopError')
                            {
                                $('#er_' + index).html(value);
                            }
                            else {
                                $('#er_TopError').append('<p>' + value + '</p>');
                            }
                        }
                    });
                    if (data.errors.TopError) {
                        $('#er_TopError').show();
                        $('#er_TopError').html(data.errors.TopError);
                        setTimeout(function () {
                            $('#er_TopError').hide(5000);
                            $('#er_TopError').html('');
                        }, 5000);
                    }
                }
                else
                {
                    $('#headLogin').html(data.loginMod);
                }
            } else {
                //document.getElementById("setData").reset();
                $('#myModal').modal('hide');
                $('#successTop').show();
                $('#successTop').html(data.msg);
                if (data.msg != '' && data.msg != "undefined") {

                    bootbox.alert({closeButton: false, message: data.msg, callback: function () {
                            if (data.url) {
                                window.location.href = '<?php echo site_url() ?>' + '/' + data.url;
                            } else {
                                location.reload(true);
                            }
                        }});
                } else {
                    bootbox.alert({closeButton: false, message: "Success", callback: function () {
                        if (data.url) {
                            window.location.href = '<?php echo site_url() ?>' + '/' + data.url;
                        } else {
                            location.reload(true);
                        }
                    }});
                }

            }
        }
        catch (e) {
            if (e) {
                $('#er_TopError').show();
                $('#er_TopError').html(e);
                setTimeout(function () {
                    $('#er_TopError').hide(5000);
                    $('#er_TopError').html('');
                }, 5000);
            }
        }
    }
});

5

Tôi đang sử dụng mã một dòng đơn giản này trong nhiều năm mà không gặp vấn đề gì (nó yêu cầu jQuery):

<script src="http://malsup.github.com/jquery.form.js"></script> 
<script type="text/javascript">
    function ap(x,y) {$("#" + y).load(x);};
    function af(x,y) {$("#" + x ).ajaxSubmit({target: '#' + y});return false;};
</script>

Ở đây ap () có nghĩa là một trang Ajax và af () có nghĩa là một dạng Ajax. Trong một biểu mẫu, chỉ cần gọi hàm af () sẽ đăng biểu mẫu lên URL và tải phản hồi trên phần tử HTML mong muốn.

<form id="form_id">
    ...
    <input type="button" onclick="af('form_id','load_response_id')"/>
</form>
<div id="load_response_id">this is where response will be loaded</div>

Tôi muốn bạn bao gồm các tập tin máy chủ! Không có ý tưởng làm thế nào để kiểm tra.
johny tại sao

4

Trong tệp php của bạn, nhập:

$content_raw = file_get_contents("php://input"); // THIS IS WHAT YOU NEED
$decoded_data = json_decode($content_raw, true); // THIS IS WHAT YOU NEED
$bar = $decoded_data['bar']; // THIS IS WHAT YOU NEED
$time = $decoded_data['time'];
$hash = $decoded_data['hash'];
echo "You have sent a POST request containing the bar variable with the value $bar";

và trong tệp js của bạn gửi ajax với đối tượng dữ liệu

var data = { 
    bar : 'bar value',
    time: calculatedTimeStamp,
    hash: calculatedHash,
    uid: userID,
    sid: sessionID,
    iid: itemID
};

$.ajax({
    method: 'POST',
    crossDomain: true,
    dataType: 'json',
    crossOrigin: true,
    async: true,
    contentType: 'application/json',
    data: data,
    headers: {
        'Access-Control-Allow-Methods': '*',
        "Access-Control-Allow-Credentials": true,
        "Access-Control-Allow-Headers" : "Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept, Authorization",
        "Access-Control-Allow-Origin": "*",
        "Control-Allow-Origin": "*",
        "cache-control": "no-cache",
        'Content-Type': 'application/json'
    },
    url: 'https://yoururl.com/somephpfile.php',
    success: function(response){
        console.log("Respond was: ", response);
    },
    error: function (request, status, error) {
        console.log("There was an error: ", request.responseText);
    }
  })

hoặc giữ nguyên như với mẫu - nộp. Bạn chỉ cần điều này, nếu bạn muốn gửi một yêu cầu sửa đổi với nội dung bổ sung được tính toán và không chỉ một số dữ liệu biểu mẫu, được khách hàng nhập vào. Ví dụ: hàm băm, dấu thời gian, userid, sessionid và tương tự.


2

Làm ơn kiểm tra cái này. Đây là mã yêu cầu Ajax hoàn chỉnh.

$('#foo').submit(function(event) {
    // Get the form data
    // There are many ways to get this data using jQuery (you
    // can use the class or id also)
    var formData = $('#foo').serialize();
    var url = 'URL of the request';

    // Process the form.
    $.ajax({
        type        : 'POST',   // Define the type of HTTP verb we want to use
        url         : 'url/',   // The URL where we want to POST
        data        : formData, // Our data object
        dataType    : 'json',   // What type of data do we expect back.
        beforeSend : function() {

            // This will run before sending an Ajax request.
            // Do whatever activity you want, like show loaded.
        },
        success:function(response){
            var obj = eval(response);
            if(obj)
            {
                if(obj.error==0){
                    alert('success');
                }
                else{
                    alert('error');
                }
            }
        },
        complete : function() {
            // This will run after sending an Ajax complete
        },
        error:function (xhr, ajaxOptions, thrownError){
            alert('error occured');
            // If any error occurs in request
        }
    });

    // Stop the form from submitting the normal way
    // and refreshing the page
    event.preventDefault();
});

Đây là những gì tôi đang tìm kiếm.
Nirav Bhoi

2

Đây là một bài viết rất hay có chứa mọi thứ bạn cần biết về việc gửi biểu mẫu jQuery.

Tóm tắt bài viết:

Mẫu HTML đơn giản Gửi

HTML:

<form action="path/to/server/script" method="post" id="my_form">
    <label>Name</label>
    <input type="text" name="name" />
    <label>Email</label>
    <input type="email" name="email" />
    <label>Website</label>
    <input type="url" name="website" />
    <input type="submit" name="submit" value="Submit Form" />
    <div id="server-results"><!-- For server results --></div>
</form>

JavaScript:

$("#my_form").submit(function(event){
    event.preventDefault(); // Prevent default action
    var post_url = $(this).attr("action"); // Get the form action URL
    var request_method = $(this).attr("method"); // Get form GET/POST method
    var form_data = $(this).serialize(); // Encode form elements for submission

    $.ajax({
        url : post_url,
        type: request_method,
        data : form_data
    }).done(function(response){ //
        $("#server-results").html(response);
    });
});

HTML Multipart / form-data Form Gửi

Để tải tệp lên máy chủ, chúng ta có thể sử dụng giao diện FormData có sẵn cho XMLHttpRequest2, cấu trúc này tạo đối tượng FormData và có thể dễ dàng gửi đến máy chủ bằng jQuery Ajax.

HTML:

<form action="path/to/server/script" method="post" id="my_form">
    <label>Name</label>
    <input type="text" name="name" />
    <label>Email</label>
    <input type="email" name="email" />
    <label>Website</label>
    <input type="url" name="website" />
    <input type="file" name="my_file[]" /> <!-- File Field Added -->
    <input type="submit" name="submit" value="Submit Form" />
    <div id="server-results"><!-- For server results --></div>
</form>

JavaScript:

$("#my_form").submit(function(event){
    event.preventDefault(); // Prevent default action
    var post_url = $(this).attr("action"); // Get form action URL
    var request_method = $(this).attr("method"); // Get form GET/POST method
    var form_data = new FormData(this); // Creates new FormData object
    $.ajax({
        url : post_url,
        type: request_method,
        data : form_data,
        contentType: false,
        cache: false,
        processData: false
    }).done(function(response){ //
        $("#server-results").html(response);
    });
});

Tôi hi vọng cái này giúp được.


2

Kể từ khi giới thiệu API Fetch , thực sự không còn lý do nào để làm điều này với jQuery Ajax hoặc XMLHttpRequests. Để POST dữ liệu biểu mẫu thành tập lệnh PHP bằng vanilla JavaScript, bạn có thể làm như sau:

function postData() {
    const form = document.getElementById('form');
    const data = new FormData();
    data.append('name', form.name.value);

    fetch('../php/contact.php', {method: 'POST', body: data}).then(response => {
        if (!response.ok){
            throw new Error('Network response was not ok.');
        }
    }).catch(err => console.log(err));
}
<form id="form" action="javascript:postData()">
    <input id="name" name="name" placeholder="Name" type="text" required>
    <input type="submit" value="Submit">
</form>

Đây là một ví dụ rất cơ bản về tập lệnh PHP lấy dữ liệu và gửi email:

<?php
    header('Content-type: text/html; charset=utf-8');

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

    $to = "test@example.com";
    $subject = "New name submitted";
    $body = "You received the following name: $name";

    mail($to, $subject, $body);

Hỗ trợ trình duyệt Internet Explorer có thể là một lý do để tiếp tục sử dụng jQuery AJAX
Huub S

@HuubS Tại sao? Chỉ cần sử dụng một polyfill. jQuery đã chết IMHO.
leo núi
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.