Safari(iOS および macOS)にてFormDataでのファイル送信に失敗する
iOS上の全てのブラウザ、および、macOS上のSafariにて、FormDataを使ってinput[type=file]を含むフォームの内容を送信しようとした際に、ファイルが添付されていないと処理が失敗します。これは、Safariの不具合で、iOS11.3以降で発生しているようなのですが、Safariのせいにしたところで問題は解決しません。
ということで、この不具合を回避するコードを作成しました。
//ここは通常のコード var data = new FormData($('#request-sheet-form').get(0)); //ここが作成したコード type=fileの場合に中身が空なら要素自体を削除する $("input[type=file]").each(function(i,j){ var name = $(j).attr("name"); if(!$('[name=' + name + ']').val()) { data.delete(name); } }); //ここから先も通常のコード $.ajax({ url: 'hoge.php', type: 'POST', data: data, processData: false, contentType: false, }).done(function(data, status, xhr){ });