エラーが出るユーザーがいるとのことだったので、調べたところ
Internet Explorer10/11を使っているときのバグだったようです。
formはこんな感じで組んでいました。
<form accept-charset="UTF-8" action="/test" method="post"> <input class="datepicker form-control" id="test" name="test[dates_attributes][201510000][date]" placeholder="日付を選択してください" readonly="readonly" type="text" value="2015-10-23" /> <input id="dates_attributes_201510007__destroy" name="test[dates_attributes][201510000][_destroy]" type="checkbox" value="1" /> <a class="save-dates-btn">更新</a> </form>
ajax部分もよくある形で組んでいました。
$(document).on("click", '.save-dates-btn', function(event) {
var form = $(this).parents('form:first');
var formData = new FormData( form[0] );
$.ajax({
type: "POST",
url: "#{update_dates_path}.json",
data: formData,
processData: false,
contentType: false,
error: function(data){
console.log("error");
},
success: function (data) {
console.log("success");
}
});
});
サーバーはrailsを使っていて、以下のエラーが出ていました。
!! Unexpected error while processing request: bad content body
調べていったところ、
IE10/11ではformの中の最後のinputがチェックボックスで、それに対してチェックボックスがついてないときに、
ajaxで送るformDataの値がおかしくなるようです。
対策としてはcheckboxが最後にならないようにすればよいようで、
最後にhiddenでもよいのでダミーのパラメータを追加して対応しました。
<input name="dummy" type="hidden" value="1" />
参考URL
https://blog.yorkxin.org/posts/2014/02/06/ajax-with-formdata-is-broken-on-ie10-ie11/
0 件のコメント:
コメントを投稿