我的问题是关于使用jQuery发送表单数据。我了解到,当省略contentType行时,jQuery默认为x-www-formdata-urlencoded编码。这是我认为应该使用的。但如果contentType设置为false,则使用多部分/表单数据编码。
然而,当contentType被省略时,PHP表示“searchcity”索引未定义,这意味着jQuery没有从我的HTML输入成功发送“searchcity”。当contentType设置为false时,这意味着jQuery使用多部分/表单数据,PHP能够找到索引,一切正常。
但在HTML中,如果省略“enctype”,则默认为x-www-formdata-urlencoding。如果我使用
那么,为什么在发送表单时,超文本标记语言可以使用x-www. formdata-urlen编码成功地将表单数据发送到PHP,但是jQuery需要多部分/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
contentType选项为false用于传递文件的多部分/表单数据表单。如果将contentType选项设置为false,将强制jQuery不添加内容类型头,否则,它将丢失边界字符串。