У меня возникла проблема с проводкой при отправке формы с использованием jquery ajax. У меня есть поле для загрузки нескольких изображений. в то время как я использую функцию e.preventDefault (), изображения не загружаются. но пока я отключу этот код. он остается прекрасным. вот мой фрагмент кода для разметки, js и php
HTML
<form class="shoform" id="contact-entry" name="contact-entry" action="project-up-eng.php" method="post" enctype="multipart/form-data"> <input class="pic" id="img" type="file" multiple="multiple" name="imgfile[]" /> <input class="submitbtn" id="submitbtn" type="submit" value="Add"></input> </form>
JS
$("#submitbtn").click(function(){ $("#contact-entry").submit(function() { /* Act on the event */ e.preventDefault(); $.post('project-up-eng.php',$(this).serialize(), function() { alert("OK"); }); }); });
PHP:
mkdir("projects/".$_POST['name']); $path="projects/".$_POST['name']; for($i=0;$i<count($_FILES['imgfile']['size']);$i++) { $file = $path."/".$_FILES['imgfile']['name'][$i]; move_uploaded_file($_FILES['imgfile']['tmp_name'][$i],$file); }
К сожалению, вы не можете отправлять формы с файлами через AJAX с классическим HTML. Когда вы вызываете e.preventDefault()
, обычная загрузка файла не выполняется, а ваш $.post
вы вызываете вручную, просто не может выполнить то, что вы хотите.
Вы можете загружать с помощью JavaScript в новых браузерах с новой функциональностью HTML 5. См. « Как загрузить файлы с помощью AJAX ».
Вы не указываете, на каком элементе вы хотите отключить функцию события по умолчанию.
В настоящее время существует два элемента #submitbtn и "# contact-entry"
Если вы хотите предотвратить #submitbtn, тогда
$("#submitbtn").click(function(e){ // just check e in the bracket e.preventDefault(); $("#contact-entry").submit(function() { /* Act on the event */ // e.preventDefault(); this line removed $.post('project-up-eng.php',$(this).serialize(), function() { alert("OK"); }); }); });
Если вы хотите предотвратить # контакт-запись, тогда
$("#submitbtn").click(function(){ $("#contact-entry").submit(function(e) { // just check e in the bracket /* Act on the event */ e.preventDefault(); $.post('project-up-eng.php',$(this).serialize(), function() { alert("OK"); }); }); });