前提・実現したいこと
railsで画像を投稿するアプリを作っています。
現在、dropした画像をAjax通信で投稿する機能を作ろうと試みていますが思うように動作せず困っています。
何かいい方法があればお知恵をおかしいただけないでしょうか?
発生している問題・エラーメッセージ
![
画像をドラッグ&ドロップすると、エラー(422)が出ます。
サーバーが要求本文のコンテンツ型を理解でき、要求本文の構文が正しいものの、中に含まれている指示が処理できなかったことを表しているらしい。
該当のソースコード
haml
1= form_with model: [@scrap_folder, @scrap], local: true do |f| 2 = f.label :image, class: 'overlay-area', id: 'js-overlay-area' do 3 = f.file_field :image, style: "display: none" 4 .overlay-text#js-overlay-text 5 %p ここにドラッグ&ドロップしてください
JS
1$(function () { 2 document.addEventListener("turbolinks:load", function () { 3 function buildPost(scrap) { 4 return ` 5 <div class="ScrapImage" data-scrap-id=${scrap.id}> 6 <a data-lightbox="group" href="${scrap.image}" created_at = "${scrap.created_at}"> 7 <img src="${scrap.image}" alt="写真"> 8 </a> 9 </div> 10 ` 11 } 12 13 $('#js-overlay-area').on('drop', function (e) { 14 e.preventDefault(); 15 e.stopPropagation(); 16 //fileを取得 17 let file = e.originalEvent.dataTransfer.files[0]; 18 let formData = new FormData(); 19 formData.append("file", file); 20 let url = $(this).parent().attr('action') 21 $.ajax({ 22 url: url, 23 type: "POST", 24 data: formData, 25 dataType: 'json', 26 cache: false, 27 processData: false, 28 contentType: false 29 }) 30 .done(function (data) { 31 let html = buildPost(data) 32 $(".scrap").append(html).animate({scrollTop: $(".scrap")[0].scrollHeight}) 33 }) 34 .fail(function () { 35 alert("画像の送信に失敗しました") 36 }) 37 }) 38 }) 39}) 40
試したこと
コントローラーのcreateでbinding.pryをしたが、ログに反応がなかった。
恐らく、JavaScriptのファイルからAjaxでコントローラーに送る際にエラーが発生していると考えています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/15 08:58