2017-03-15 136 views
0

我創建了一個使用FormData添加圖像的ajax請求。 它的外觀:從ajax發送數據到控制器動作

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); 
     } 
    }) 
} 

和處理時

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

myForm的是我的所有形式的ID。此表單轉到操作網站/表單但對於ajax請求,我創建了網站/圖像我可以獲取圖像的操作。我想在表單發送時發送他們兩個。 但問題是,當我試圖把我的圖像到網站/表單動作,我需要把它然後因爲網站/表單處理不同的邏輯(保存form_id從表單模型到圖像模型,將該圖像附加到郵件和其他) 。我該如何解決它?我知道如何在表單發送請求到一個動作時獲取圖像,我當然可以從具有模型和模型屬性的UploadedFile :: getInstances()中獲取它們。但是現在我沒有模型和其他。

回答

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

嘗試multipart/form-data作爲構建AJAX請求時的內容類型。

你要求的有點不對,AJAX呼叫是非阻塞的,你可以同時發送它們,但是你不知道哪一個在服務器上會變得更快,如果你的site/form依賴於site/image ,然後首先將數據提交到site/image,在應用定製邏輯(圖像上傳到服務器等)並執行成功後,提交服務的數據success,否則吐出錯誤。