DEV Community

Falah Al Fitri
Falah Al Fitri

Posted on • Updated on

PHP jQuery form formData 70: complete using ajax ($.ajax)


Happy Coding

index.php

    <form method="post" action="process.php" enctype="multipart/form-data" >

        Firstname: <input type="text" name="firstname" />
        <br />

        Lastname: <input type="text" name="lastname" />
        <br />

        Description: <textarea name="description" rows="10" cols="50" ></textarea>
        <br />

        Gender:
        <input type="radio" name="gender" value="male" checked /> Male
        <input type="radio" name="gender" value="female" /> Female
        <br />

        Programming Language (single):
        <select name="language" >
            <option value="c" >C</option>
            <option value="c++" >C++</option>
            <option value="java" >Java</option>
            <option value="javascript" selected >Javascript</option>
            <option value="php" >PHP</option>
        </select>
        <br />

        Programming Languages (multiple): (hold ctrl + click item)
        <select name="languages[]" multiple >
            <option value="c" >C</option>
            <option value="c++" selected >C++</option>
            <option value="java" >Java</option>
            <option value="javascript" selected >Javascript</option>
            <option value="php" >PHP</option>
        </select>
        <br />

        Hobby (single): <input type="checkbox" name="hobby" value="studying" /> Studying
        <br />

        Hobbies (multiple):
        <input type="checkbox" name="hobbies[]" value="studying" /> Studying
        <input type="checkbox" name="hobbies[]" value="reading" checked /> Reading
        <input type="checkbox" name="hobbies[]" value="writing" /> Writing
        <input type="checkbox" name="hobbies[]" value="sleeping" checked /> Sleeping
        <br />

        File Upload: <input type="file" name="upload" /><br />
        Preview: <img src="#" />
        <br />

        <hr />

        <input type="submit" value="Submit" />

    </form>
Enter fullscreen mode Exit fullscreen mode

display result form server

    <div id="output"></div>
Enter fullscreen mode Exit fullscreen mode

get formHTML element and add onsubmit event, and create formData, then call ajax function with arguments formHTML, formData and output display ("#output")

    <script>

        /* submit form */

        // https://api.jquery.com/jquery.each/
        /*
         *  array.each( function( index, element ) )
         *  $.each( array, callback )
         */

        // https://www.w3schools.com/jquery/misc_each.asp

        /* get all form */
        $( "form" ).each( function () {

            /* each form add onsubmit event */
            $( this ).bind( "submit", function (event) {

                event.preventDefault(); // return false


                var formHTML = event.target; // $( this ) => not work !!

                console.log( formHTML ); // formHTML element


                // https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects
                var formData = new FormData( formHTML );

                console.log( formData );


                // https://api.jquery.com/jquery.ajax/
                // https://www.w3schools.com/jquery/ajax_ajax.asp
                // https://www.w3schools.com/jquery/jquery_ref_ajax.asp

                /* AJAX request */
                ajax( formHTML, formData, "#output" ); // ajax( form, data, destination )

            } );

        });

    </script>
Enter fullscreen mode Exit fullscreen mode

ajax function

    <script>

        function ajax( form, data, destination )
        {

            $.ajax({

                method: form.method,
                url: form.action,

                data: data,

                /*
                    result type data
                    JSON.parse(data)
                    http://api.jquery.com/jQuery.ajax/
                    https://stackoverflow.com/questions/14322984/differences-between-contenttype-and-datatype-in-jquery-ajax-function
                    https://forums.asp.net/t/2087039.aspx?what+is+difference+between+dataType+and+contentType+in+jquery
                */
                dataType: "HTML",

                /* formData */
                contentType: false, // formData with $_POST or $_FILES in server (PHP)
                processData: false

            })

            /* handle success */
            .done( function(result) {

                $( destination ).html( result );

                console.log(result);

            } )

            /* handle error */
            .fail( function(error) {

                alert("Cannot Set Data!");

                console.error(error);

            } );

        }

    </script>
Enter fullscreen mode Exit fullscreen mode

add onchange event in input with file type, then display it with img tag

    <script>

        /* preview image */
        $( "input[type='file']" ).on( "change", function () {

            var preview = document.querySelector( "img" );
            var file    = document.querySelector( "input[type='file']" ).files[0];
            var reader  = new FileReader();

            reader.addEventListener( "load", function () {
                preview.height = 100;
                preview.title  = file.name;
                preview.src    = reader.result;
            }, false );

            if (file)
            {
                reader.readAsDataURL(file);
            }

            console.log( reader );

        } );

    </script>
Enter fullscreen mode Exit fullscreen mode

process.php

echo "<pre>";

var_dump($_POST);

echo "</pre>";
Enter fullscreen mode Exit fullscreen mode

Demo repl.it


Thank for reading :)

Top comments (0)