![](/img/trans.png)
[英]TypeError: 'append' called on an object that does not implement interface FormData with processData and contentType false both
[英]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.