2017-03-15 3 views
0

FormData를 사용하여 이미지를 추가 한 아약스 요청을 만듭니다. 그것의 모양 :아약스에서 컨트롤러 액션으로 데이터 보내기

$("#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); 
     } 
    }) 
} 

및 취급. 이 양식은 사이트/양식으로 보내지 만 아약스 요청에 대해서는 사이트/이미지 조치를 통해 이미지를 얻을 수 있습니다. 양식을 보낼 때 둘 다 보내려고합니다. 하지만 문제는 사이트/양식 작업에 이미지를 넣으려고 할 때 사이트/양식이 다른 논리를 처리하기 때문입니다 (양식 모델에서 이미지 모델로 form_id 저장, 이미지를 메일에 첨부하는 등) . 어떻게 해결할 수 있습니까? 폼이 하나의 액션에 요청을 보낼 때 이미지를 얻는 방법을 알고 있으며 물론 모델 및 모델 속성이있는 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/image에 제출하고 맞춤 로직을 적용한 후 (이미지를 서버에 업로드하는 등) site/form에 게재 될 데이터를 제출하고 success에 제출하십시오. 그렇지 않으면 오류가 발생합니다.

관련 문제