簡體   English   中英

為什么 jQuery formData 需要 contentType=false?

[英]Why does jQuery formData need contentType=false?

我的問題是關於使用 jQuery 發送表單數據。 我讀到當 contentType 行被省略時,jQuery 默認為 x-www-formdata-urlencoded 編碼。 這是我認為應該使用的。 但是如果 contentType 設置為 false,則它使用 multipart/form-data 編碼。

但是,當 contentType 被省略時,PHP 會說“searchcity”索引未定義,這意味着 jQuery 沒有成功地從我的 HTML 輸入中發送“searchcity”。 當 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 可以使用 x-www-formdata-urlencoding 將表單數據成功發送到 PHP,而 jQuery 需要 multipart/form-data 呢?

我只發送文本,不發送文件。

<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

為 false 的 contentType 選項用於傳遞文件的 multipart/form-data 表單。 當將 contentType 選項設置為 false 時,它​​會強制 jQuery 不添加 Content-Type 標頭,否則,將丟失邊界字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM