JS: FormData с вводом файла - сбой Ajax-запроса - PullRequest
0 голосов
/ 05 июня 2018

У меня действительно странная проблема, которая не появлялась, пока я не отправил свой код на работающий сервер и не попытался использовать его с моим iPhone.

Это отправка скрипту node.js, который я 'мы настроили протоколирование всех входящих запросов (вместе с заголовками и методами), и в журналах ничего не показывается, когда возникает проблема, представленная ниже.

Так или иначе:

$('#addrecord').on('submit', function(e) {
e.preventDefault();
var url = '/admin/app/addrecord'
    var data = $('#addrecord')[0];
    var formData = new FormData(data);

            $.ajax({ // create an AJAX call...
             data: formData,
             processData: false,
             contentType: false,
             cache: false,
             type: "POST", // GET or POST
             url: url, // the file to call
             success: function(response) { // on success..
                if (response.name == 200) {
                    if (response.message == "add") {addComplete(response.address);}
                    else {editComplete(response.address);};
                 }
                 else {
                    console.log("Form Rejected");        
                 }  
              },
              error: function(response) { 
                console.log("Error - " + JSON.stringify(response));
              } 
          });
    });

Это в сочетании собычный <form id="addrecord" method="post" enctype="multipart/form-data" role="form"> ... </form> в моем html-файле.

Так что проблема в том, что у этой формы есть поле ввода <input type="file" id="photo" name="photo">.Если я пытаюсь отправить форму без изображения, выбранного в этом входе, форма ничего не отправляет и просто зависает.Сервер абсолютно ничего не получает (помните, я регистрирую каждый запрос).

Теперь, если я использую ввод файла, чтобы выбрать изображение со своего телефона, или если я редактирую HTML, чтобы удалить вводполе file, запрос Ajax запускается без перебоев, и все отлично воспринимается моим сервером node.js.

Я действительно озадачен этим.Есть идеи?

1 Ответ

0 голосов
/ 15 июня 2018

Видимо, это ошибка в Safari.

Закончено обнаружение, был ли выбран файл, и, если нет, удаление элемента из DOM перед отправкой формы.

...