Мой вопрос касается отправки данных формы с использованием 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