Przykład jQuery Ajax POST z PHP


682

Próbuję wysłać dane z formularza do bazy danych. Oto formularz, którego używam:

<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>

Typowym podejściem byłoby przesłanie formularza, ale powoduje to przekierowanie przeglądarki. Czy przy użyciu jQuery i Ajax można przechwycić wszystkie dane formularza i przesłać je do skryptu PHP (przykład, form.php )?


3
Zobacz powiązaną meta dyskusję zawierającą uzasadnienie cofnięcia.
TRiG

Proste rozwiązanie waniliowe js: stackoverflow.com/a/57285063/7910454
leonheess

Odpowiedzi:


939

Podstawowe użycie .ajaxwyglądałoby mniej więcej tak:

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);
    });

});

Uwaga: Ponieważ jQuery 1.8 .success(), .error()i .complete()są przestarzałe na korzyść .done(), .fail()i .always().

Uwaga: pamiętaj, że powyższy fragment $(document).ready()kodu należy wykonać po przygotowaniu modelu DOM, dlatego należy umieścić go w module obsługi (lub użyć $()skrótu).

Wskazówka: możesz połączyć programy obsługi oddzwaniania w następujący sposób:$.ajax().done().fail().always();

PHP (czyli 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;

Uwaga: Zawsze oczyszczaj opublikowane dane , aby zapobiec wstrzyknięciom i innym złośliwym kodom.

Możesz również użyć skrótu .postzamiast .ajaxw powyższym kodzie JavaScript:

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

Uwaga: Powyższy kod JavaScript działa z jQuery 1.8 i nowszymi, ale powinien działać z poprzednimi wersjami, aż do jQuery 1.5.


6
Edytowałem swoją odpowiedź, aby naprawić błąd: requestzostał zadeklarowany jako lokalny var, który if (request) request.abort();nigdy nie działa.
Andrey Mikhaylov - lolmaus

23
BARDZO WAŻNA uwaga, ponieważ spędziłem / zmarnowałem / zainwestowałem dużo czasu próbując skorzystać z tego przykładu. Musisz albo powiązać zdarzenie w bloku $ (dokument) .ready LUB LUB załadować FORMULĘ przed wykonaniem powiązania. W przeciwnym razie spędzasz dużo czasu próbując dowiedzieć się, DLACZEGO w piekle wiązanie nie jest wywoływane.
Philibert Perusse

3
@PhilibertPerusse Podobnie jak w przypadku dowolnego wiązania zdarzenia, oczywiście element musi istnieć w DOM przed próbą powiązania z nim lub jeśli używasz delegowanego wiązania.
mekwall

10
Tak, teraz to rozumiem. Ale znalazłem wiele przykładów, które zawsze blokują $ (dokument) .ready, aby przykład był samowystarczalny. Napisałem komentarz dla przyszłego użytkownika, który może, podobnie jak ja, natknąć się na to i skończyć czytając wątek komentarza i tę „wskazówkę” dla początkujących
Philibert Perusse

5
Jeśli stosujesz to do własnego kodu, pamiętaj, że atrybuty „name” mają kluczowe znaczenie dla danych wejściowych, w przeciwnym razie serialize()zostaną pominięte.
Ben Flynn

216

Aby złożyć żądanie Ajax za pomocą jQuery, możesz to zrobić za pomocą następującego kodu.

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:

Metoda 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);
        }
    });

Metoda 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');
    });

.success(), .error()I .complete()wywołania zwrotne są przestarzałe jak z jQuery 1.8 . Aby przygotować swój kod do ich ostatecznego usunięcia, należy użyć .done(), .fail()i .always()zamiast tego.

MDN: abort(). Jeśli żądanie zostało już wysłane, ta metoda przerwie żądanie.

Dlatego pomyślnie wysłaliśmy żądanie Ajax, a teraz nadszedł czas, aby pobrać dane na serwer.

PHP

Jak złożyć zamówienie odpowiedzieć w wywołaniu Ajax ( type: "post"), możemy teraz dane grab pomocą jednej $_REQUESTlub $_POST:

  $bar = $_POST['bar']

Możesz także zobaczyć, co otrzymujesz w żądaniu POST, po prostu przez. BTW, upewnij się, że $_POSTjest ustawiony. W przeciwnym razie pojawi się błąd.

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

I wstawiasz wartość do bazy danych. Upewnij się, że uwrażliwiasz lub unikasz wszystkich żądań (niezależnie od tego, czy wykonałeś GET czy POST) przed wykonaniem zapytania. Najlepiej byłoby użyć przygotowanych wyciągów .

A jeśli chcesz zwrócić jakiekolwiek dane z powrotem na stronę, możesz to zrobić, po prostu odbierając te dane jak poniżej.

// 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'));

A potem możesz to uzyskać w następujący sposób:

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

Istnieje kilka metod skróconych . Możesz użyć poniższego kodu. Działa tak samo.

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

@ Pasek oświadczenia jest nazwą tekstową typu wejściowego, a ponieważ pozywam metodę postu, więc $ _POST ['pasek'] służy do uzyskania jego wartości
NullPoiиteя

4
Dla każdego, kto chce używać json - podczas korzystania z JSON wywołanie powinno zawierać parametr dataType: „json”
K. Kilian Lindberg

4
@CarlLindberg - Co zrobić, jeśli chcesz zgadywać jQuery na podstawie typu odpowiedzi MIME (co należy zrobić, gdy nie ustawisz dataType), aby potencjalnie mógł zaakceptować JSON lub inny format?
nnnnnn

@nnnnnn masz rację - to jest o wiele lepsze - w rzeczywistości jest domyślnie: Inteligentne zgadywanie
K. Kilian Lindberg

Aby uzyskać dostęp do obiektu odpowiedzi JSON (data.returned_val), nie zapomnij dołączyć dataType: „json” do pierwotnego wywołania ajax
Adelmar

56

Chciałbym podzielić się szczegółowym sposobem publikowania postów w PHP + Ajax wraz z błędami zwracanymi w przypadku niepowodzenia.

Przede wszystkim utwórz dwa pliki, na przykład form.phpi process.php.

Najpierw utworzymy taki, formktóry zostanie następnie przesłany przy użyciu jQuery .ajax()metody. Reszta zostanie wyjaśniona w komentarzach.


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>


Sprawdź poprawność formularza, sprawdzając poprawność po stronie klienta jQuery i przekaż dane do 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
    });
});

Teraz przyjrzymy się 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);

Pliki projektu można pobrać ze strony http://projects.decodingweb.com/simple_ajax_form.zip .


27

Możesz użyć serializacji. Poniżej znajduje się przykład.

$("#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()jest całkowitym ratownikiem, dzięki. Miałem problem z interpretacją wyników na podstawie innych odpowiedzi.
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

Korzystam ze sposobu pokazanego poniżej. Przekazuje wszystko jak pliki.

$(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

Jeśli chcesz wysłać dane za pomocą jQuery Ajax, nie ma potrzeby tagu formularza i przycisku przesyłania

Przykład:

<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>

jaka jest różnica między twoją a inną odpowiedzią?
NullPoiиteя

11
jest opublikowany przeze mnie, inni są przez innych.
John

6

Obsługa błędów i modułu ładującego Ajax przed przesłaniem i po przesłaniu pokazuje okno startowe z przykładem:

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

Używam tego prostego kodu jednoliniowego od lat bez problemu (wymaga 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>

Tutaj ap () oznacza stronę Ajax, a af () oznacza formularz Ajax. W formularzu po prostu wywołanie funkcji af () spowoduje wysłanie formularza do adresu URL i załadowanie odpowiedzi na żądany element HTML.

<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>

Chciałbym dołączyć plik serwera! Nie mam pojęcia, jak testować.
John, dlaczego

4

W swoim pliku php wpisz:

$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";

i w swoim pliku js wyślij ajax z obiektem danych

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);
    }
  })

lub zachowaj tak, jak jest przy przesyłaniu formularza. Potrzebujesz tego tylko, jeśli chcesz wysłać zmodyfikowane żądanie z obliczoną dodatkową treścią, a nie tylko niektórymi danymi formularza, które wprowadza klient. Na przykład skrót, znacznik czasu, identyfikator użytkownika, identyfikator sesji i tym podobne.


2

Proszę to sprawdzić. Jest to kompletny kod żądania Ajax.

$('#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();
});

Właśnie tego szukam.
Nirav Bhoi

2

To bardzo dobry artykuł, który zawiera wszystko, co musisz wiedzieć o przesyłaniu formularza jQuery.

Podsumowanie artykułu:

Prosty formularz HTML Prześlij

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 Submit

Aby przesłać pliki na serwer, możemy użyć interfejsu FormData dostępnego dla XMLHttpRequest2, który konstruuje obiekt FormData i może być łatwo wysłany na serwer za pomocą 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);
    });
});

Mam nadzieję, że to pomoże.


2

Od czasu wprowadzenia Fetch API nie ma już żadnego powodu, aby robić to z jQuery Ajax lub XMLHttpRequests. Aby wysłać dane POST do skryptu PHP w waniliowym JavaScript, możesz wykonać następujące czynności:

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>

Oto bardzo podstawowy przykład skryptu PHP, który pobiera dane i wysyła wiadomość e-mail:

<?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);

Wsparcie dla Internet Explorera może być powodem do dalszego używania jQuery AJAX
Huub S

@HuubS Dlaczego? Po prostu użyj polifillu. jQuery nie żyje IMHO.
leonheess
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.