Почему jQuery formData нужно contentType = false? - PullRequest
0 голосов
/ 01 марта 2020

Мой вопрос касается отправки данных формы с использованием jQuery. Я прочитал, что когда строка contentType опущена, jQuery по умолчанию используется кодировка x- www-formdata-urlencoded. Это то, что я думаю, ДОЛЖНО быть использовано. Но если для contentType установлено значение false, используется кодировка multipart / form-data.

Однако, если contentType опущен, PHP говорит, что индекс searchcity не определен, то есть jQuery не удалось отправить 'searchcity' из моего HTML ввода. Когда для contentType установлено значение false, это означает, что jQuery использует multipart / form-data, а PHP может найти индекс, и все работает нормально.

Но в HTML, если вы опустите ' enctype ', по умолчанию это x- www-formdata-urlencoding.. Если я использую <form action = 'search.php' method = "POST"></form>, он использует x- www-formdata-urlencoding и работает нормально. Мне НЕ нужно было бы использовать <form action = 'search.php' method = "POST" enctype = "multipart/form-data"></form>

Так почему же при отправке формы HTML может успешно отправлять данные формы на PHP, используя x- www-formdata-urlencoding, но jQuery требует multipart / form -данные?

Я отправляю только текст, без файлов.

<html>
        <header><script src = "/jquery.js"></script></header>
        <a href="/login.html">Login/Register</a> <br>

        <form id = "searchform">
            <input type = "text" name = "searchcity" size = "40"><br>
            <input type = "button" id = "submit" value = "Search">
        </form>

        <script>
            $("#submit").click(function(){
                if( $("#searchform")[0].reportValidity() ){
                    var form = new FormData( $("#searchform")[0] );
                    $.post({
                        url:"/search.php",
                        processData:false,   //prevents jquery from turning form to string
                        contentType:false,   // this means to use multipart form encoding, but why?
                        data:form,
                        success:function(data){
                            alert(data);
                        }
                    });
                }
            });

        </script>
        </html>
https://pastebin.com/rMh3dr7r

1 Ответ

0 голосов
/ 01 марта 2020

Параметр contentType для false используется для форм данных multipart / form-data, которые передают файлы. Если для параметра contentType задано значение false, jQuery не будет добавлять заголовок Content-Type, в противном случае строка границы будет отсутствовать.

...