2013-02-27 3 views
0

В моей форме используются предупреждения javascript для связи с пользователем, так как это предпочтительный метод в компании, в которой я работаю (в отличие от постоянных переадресаций в файл обработчика php и из него).Загрузка файла в php через ajax

Из-за этого я передаю все свои данные формы через некоторую простую проверку в jquery и отправил ее обработчику php через ajax. Вот основной взгляд на то, как я это делаю ...

var first_name = $(sender + ' #first_name'); 
var email = $(sender + ' #email'); 
var tel = $(sender + ' #telephone'); 
var comments = $(sender + ' #comments'); 

$.ajax({ 
    type: 'POST', 
    url: 'sendmail.php', 
    data: { first_name: first_name.val(), 
     email: email.val(), 
     telephone: tel.val(), 
     comments: comments.val(), 
     success: function clearFields() { 
      first_name.val(''); 
      email.val(''); 
      tel.val(''); 
      comments.val(''); 
      alert('Thank you. We will contact you as soon as possible.'); 
     } 
    } 
}); 

Прибавив поле ввода файла в одной такой форме, как следует, у меня возникают проблемы с загрузкой. В то время как электронная почта отправляет правильно, я не думаю, что Ajax посылает любые используемые данные для загрузки на файл PHP

<input type="file" name="upload" id="upload" /> 

<script> 

var upload = $("#upload"); 
$.ajax({ 
    type: 'POST', 
    url: 'sendmail.php', 
    data: { first_name: first_name.val(), 
     email: email.val(), 
     telephone: tel.val(), 
     upload: upload.val(), 
     comments: comments.val(), 
     success: function clearFields() { 
      first_name.val(''); 
      email.val(''); 
      tel.val(''); 
      upload.val(''); 
      comments.val(''); 
      alert('Thank you. We will contact you as soon as possible.'); 
     } 
    } 
}); 
</script> 

я нашел несколько вариантов, но все те, которые я» ve посмотрел на such as this, кажется, «хакерский» для меня.

Есть ли более простой способ сделать это?

+0

wht не использовать форму jQuery? http://malsup.com/jquery/form/ – alexbusu

ответ

0

Вы должны сделать это через IFrame

Таким образом, вы создать скрытый IFRAME

<iframe id="upload_target" name="upload_target" style="display: none;" src="#"></iframe> 
<!-- note the src="#" --> 

Затем вы создаете форму с некоторой кнопки и все поля, которые вы хотите иметь

<form action="path/to/uploadscript.php" method="POST" enctype="multipart/form-data" target="upload_target"> 
<!--target will tell the browser to run it in the iFrame with name="upload_target" --> 

, то в uploadscript.php вы можете использовать все значения формы, как если бы они были регулярными значениями $ _POST:

<?php upload_file($_FILES['file'], $_POST['name'], $_POST['whatever']); ?> 

Это почти похоже на использование AJAX.

+0

Страница, с которой я связан в вопросе, включала в себя выполнение одной и той же вещи, но она была намного более привлекательной, поэтому она казалась верной, как взломать ... Так где же это перейдите в мой php-файл, который создает электронную почту? – Ortund

+0

Правильно ли я предполагаю, что я просто передаю 'upload_target' в файл sendmail.php? – Ortund

+0

@Ortund Установите действие формы в файл sendmail.php, тогда это должно быть хорошо. Вы можете добавить любую форму, которую хотите, она ведет себя как обычный POST. Я использую это для загрузки изображения, проверяю, поддерживаю ли я файл типа (если не я даю JS alert;)) и в противном случае вставляю его в базу данных. Со всеми полями. Так что, я думаю, вы можете использовать его для отправки почты :) – AmazingDreams

1

Ajax не поддерживает file Операция загрузки. Но есть много плагинов, которые используют iframes для загрузки файлов асинхронно. Вы можете узнать больше об этой технике here.

Несколько JQuery плагин, которые поддерживают форму закачка
1. jQuery form
2. jQuery-File-Upload

Есть много вопросительных ответы относительно этого во многих Q & сайтов А, как this one.

Обсуждалось другое решение с использованием html 5 here, которое использует FormData.

Смежные вопросы