2017-03-15 16 views
0

FormDataを使用して画像を追加した場所でajaxリクエストを作成します。 それのルック:ajaxからコントローラへのデータ送信

$("#myForm").on("submit", handleForm); 

あるmyFormはすべて私のフォームのIDです

function handleForm(e) { 
    var data = new FormData(); 
    for(var i=0, len=storedFiles.length; i<len; i++) { 
     data.append('files['+i+']', storedFiles[i]); 
    } 
    $.ajax({ 
     url:'site/images', 
     type:'POST', 
     processData: false, 
     contentType:false, 
     data:data, 
     success: function (response) { 
      console.log(response); 
     } 
    }) 
} 

とハンドリング。このフォームは、アクションサイト/フォームに行きますが、Ajaxリクエストのために私はサイト/画像アクションを作成してイメージを取得できます。私はフォームが送信されているときにそれらの両方を送信したい。 問題は、画像をサイト/フォームアクションに入れようとしているときに、サイト/フォームが別のロジックを処理するためです(フォームモデルから画像モデルにform_idを保存し、 。どうすれば解決できますか?私は、フォームが1つのアクションにリクエストを送信するときにイメージを取得する方法を知っています。もちろん、モデルとモデルの属性を持つUploadedFile :: getInstances()から取得できます。しかし今、私はモデルとそれ以外のものをhaventします。

答えて

0

はこの

var storedFiles= $("#upload"); 
if (storedFiles.get(0) != undefined) { 
      for (i = 0; i < storedFiles.get(0).files.length; i++) { 
       data.append("files['+i+']", storedFiles.get(0).files[i]); 
      } 
     } 
+0

これはなんですか?私はリファクタリングする必要はありません私のjsコード、それは良い仕事、私はちょうど一度のアクションから別の変数を置く必要があります – rostyslav

0

を試してみて、私は..私の考え方は、あなたが何を意味するかということであることを確認していないが、私はあなたが最初のイメージモデルにアクションサイト/画像で画像を保存して、特別に提出して、それを保存するべきだと思います - 一時的なIDは、アクションとモデルの両方で同じになります(フォームモデルとイメージモデル)。一時IDは、フォームがレンダリングされるときに生成される必要があります。次に、イメージの保存に成功した後、フォームモデルを保存するには、イメージモデルの一時的なIDを保存されたフォームモデルに関連する適切なIDに置き換える必要があります。フォームモデルが無効で保存できない場合は、tmp IDを持つイメージモデルを削除し、プロセス全体を繰り返してください。

0

AJAXリクエストを作成するときにコンテンツタイプとしてmultipart/form-dataを試してください。

AJAX通話は非ブロッキングで、同時に送信することはできますが、site/formsite/imageに依存している場合は、どちらがサーバで高速になるか分かりませんカスタムロジックが適用された後(サーバーにアップロードされているイメージなど)、実行が成功した後にsite/formに送信することを意味するデータをsuccessに送信します。そうでない場合は、エラーが発生します。

関連する問題