2016-02-01 2 views
2

Я пытаюсь расширить этот скрипт с помощью формы отправки файла: Ajax Contact Form on GitHub После успешной реализации PHPMailer я подумал, что было бы интересно добавить новую загрузку файла форма. Но я не убегаю.Загрузка файла в Ajax Контактный формуляр не работает

Я добавил новую форму поля в index.html:

<div class="form-group" id="file1-field"> 
 
    <label for="form-file1" class="col-lg-2 control-label">Dateianhang</label> 
 
    <div class="col-lg-10"> 
 
     <input type="file" class="form-control" id="form-file1" name="form-file1"> 
 
    </div> 
 
</div>

Затем я добавил CONTENTTYPE и ProcessData строки в * .js файл.

$.ajax({ 
 
    type : 'POST', 
 
    url : 'php/process.php', 
 
    data : formData, 
 
    dataType : 'json', 
 
    contentType : false, 
 
    processData : false, 
 
    encode : true 
 
})

В последнем шаге я добавил эти строки в PHP скрипт:

if(is_array($_FILES)) { 
    $mail->AddAttachment($_FILES['form-file1']['tmp_name'],$_FILES['form-file1']['name']); 
} 

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

Надеюсь, вы можете мне помочь. Заранее спасибо.

+0

Добавить 'enctype = 'multipart/form-data'' в свой файл ввода – Mihai

+0

Благодарим за помощь. Но, к сожалению, ошибка сохраняется: http://imgur.com/4Id2pNn Он работает как ожидалось, когда я удаляю строки contentType и processData. – Aiko

+0

С этими двумя строками поля всей формы будут отмечены красным цветом, хотя все заполнено правильно (кроме электронной почты). – Aiko

ответ

0

Я нашел решение:

Получить данные формы с этой процедурой решить мою проблему:

// get the form data 
 
var fData = new FormData(); 
 
fData.append('name', $('input[name=form-name]').val()); 
 
fData.append('email', $('input[name=form-email]').val()); 
 
fData.append('subject', $('input[name=form-subject]').val()); 
 
fData.append('message', $('textarea[name=form-message]').val()); 
 
fData.append('file1', $('input[name=form-file1]')[0].files[0]); 
 

 
// process the form 
 
$.ajax({ 
 
    type: 'POST', 
 
    url: 'php/process.php', 
 
    data: fData, 
 
    dataType: 'json', 
 
    contentType: false, 
 
    processData: false, 
 
    encode: true 
 
})

Вместо:

  // get the form data 
 
     var formData = { 
 
      'name': $('input[name="form-name"]').val(), 
 
      'email': $('input[name="form-email"]').val(), 
 
      'subject': $('input[name="form-subject"]').val(), 
 
      'message': $('textarea[name="form-message"]').val() 
 
     }; 
 

 
     // process the form 
 
     $.ajax({ 
 
      type: 'POST', 
 
      url: 'php/process.php', 
 
      data: formData, 
 
      dataType: 'json', 
 
      //contentType : false, 
 
      //processData : false, 
 
      encode: true 
 
     })

Благодарим за помощь!

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