Почему php не принимает AJAX запрос?
Не могу отправить форму с сайта по средствам AJAX запроса..
После нажатия на кнопку отправить сформированный запрос появляется в браузерной строке
h ttps://site.ru/?name=vvvv&socialname=%40vvvv&numberfo=3000&email=vvvv%40dwa&text=vvvv+ssssss&myfile%5B%5D=
html
<form enctype="multipart/form-data" id="main-form">
<div class="form-em">
<div class="form-group">
<input type="text" name="name" class="fg-mr inpform-f" placeholder="Your name">
<input type="text" name="socialname" class="inpform-f" placeholder="Social @username">
</div>
<div class="form-group">
<div class="fg-mr fg-btn">
<input type="button" class="quantity-arrow-minus" value="-">
<input type="number" name="numberfo" class="quantity-num inpform-f" placeholder="No., of followers">
<input type="button" class="quantity-arrow-plus" value="+">
</div>
<div class="fg-btn">
<input type="email" name="email" class="inpform-f" placeholder="Your email">
</div>
</div>
<textarea name="text" rows="5" class="inpform-f" placeholder="Enter your message..."></textarea>
<div class="form-group">
</div>
<div class="form-group">
<input class="fg-mr fg-clear" id="clear-form" value="Clear form" type="reset">
<div class="fg-mr fg-wrap">
<input class="fg-mr fg-upload-none" type="file" name="myfile[]" multiple id="myfile" accept=".jpg" data-multiple-caption="{count} files selected" multiple>
<label id="upload-container" class="fg-upload" for="myfile"><strong>Load file</strong></label>
</div>
<button id="send-btn-form" class="fg-send button-f" type="submit" value="Send" onclick="submit()">Send message</button>
</div>
</div>
</form>
main.min.js
$(function() {
$("#main-form").on("submit", function(e) {
let doc = document,
formData = new FormData(),
formFile = doc.getElementById("myfile");
if (formFile.files && formFile.files.length == 1) {
file = formFile.files[0]
formData.set("myfile", file, file.name);
}
let nameForm = document.querySelector(".name");
formData.set("name", nameForm.value)
let socialnameForm = document.querySelector(".socialname");
formData.set("socialname", socialnameForm.value)
let numberfoForm = document.querySelector(".numberfo");
formData.set("numberfo", numberfoForm.value)
let emailForm = document.querySelector(".email");
formData.set("email", emailForm.value)
let textForm = document.querySelector(".text");
formData.set("text", textForm.value)
let request = new XMLHttpRequest();
request.open('POST', "php/send.php");
request.send(formData);
e.preventDefault();
});
});
php – принимаю вот так вот
$name = $_POST['name'];
$socialname = $_POST['socialname'];
$numberfollow = $_POST['numberfo'];
$email = $_POST['email'];
$text = $_POST['text'];
$file = $_FILES['myfile'];
Ответы (2 шт):
$(function() {
$("#main-form").on("submit", function(e) {
e.preventDefault();
...
И уберите onclick="submit()" из <button id="send-btn-form" class="fg-send button-f" type="submit" value="Send" onclick="submit()">Send message</button>. Зачем оно там нужно?
После этого посмотрите ошибки в консоли браузера. (Я Вам их скажу чуть позже.)
Вот они ошибочки:
$(function() {
$("#main-form").on("submit", function(e) {
e.preventDefault();
let doc = document,
formData = new FormData(),
formFile = doc.getElementById("myfile");
if (formFile.files && formFile.files.length == 1) {
file = formFile.files[0]
formData.set("myfile", file, file.name);
}
let nameForm = document.querySelector(".name");
formData.set("name", nameForm.value)
let socialnameForm = document.querySelector(".socialname");
formData.set("socialname", socialnameForm.value)
let numberfoForm = document.querySelector(".numberfo");
formData.set("numberfo", numberfoForm.value)
let emailForm = document.querySelector(".email");
formData.set("email", emailForm.value)
let textForm = document.querySelector(".text");
formData.set("text", textForm.value)
let request = new XMLHttpRequest();
request.open('POST', "php/send.php");
request.send(formData);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form enctype="multipart/form-data" id="main-form">
<div class="form-em">
<div class="form-group">
<input type="text" name="name" class="fg-mr inpform-f" placeholder="Your name">
<input type="text" name="socialname" class="inpform-f" placeholder="Social @username">
</div>
<div class="form-group">
<div class="fg-mr fg-btn">
<input type="button" class="quantity-arrow-minus" value="-">
<input type="number" name="numberfo" class="quantity-num inpform-f" placeholder="No., of followers">
<input type="button" class="quantity-arrow-plus" value="+">
</div>
<div class="fg-btn">
<input type="email" name="email" class="inpform-f" placeholder="Your email">
</div>
</div>
<textarea name="text" rows="5" class="inpform-f" placeholder="Enter your message..."></textarea>
<div class="form-group">
</div>
<div class="form-group">
<input class="fg-mr fg-clear" id="clear-form" value="Clear form" type="reset">
<div class="fg-mr fg-wrap">
<input class="fg-mr fg-upload-none" type="file" name="myfile[]" multiple id="myfile" accept=".jpg" data-multiple-caption="{count} files selected" multiple>
<label id="upload-container" class="fg-upload" for="myfile"><strong>Load file</strong></label>
</div>
<button id="send-btn-form" class="fg-send button-f" type="submit" value="Send">Send message</button>
</div>
</div>
</form>
Почитал про FormData на MDN и сделал вот так вот, и это работает.
Оказалось можно не определять каждое значение input отдельно.
FormData будет использовать только те поля ввода, которые используют атрибут name.
$("#main-form").on("submit", function(e) {
e.preventDefault();
let formName = document.querySelector('#main-form');
let formData = new FormData(formName);
let request = new XMLHttpRequest();
request.open('POST', "php/send.php");
request.send(formData);
});