2016-12-14 3 views
0

Ajax로 파일을 업로드하려고했지만 FormData가 항상 비어 있습니다. 당신은 여기에 결과를 볼 수 있습니다FormData() form 양식 요소 항상 비어 있음

<html> 
<head> 
<link rel="stylesheet" href="../website/css/bootstrap.min.css"> 
</head> 
<body> 
    <form id="providerForm"> 
     <input id="fileI" class="form-control" name="fileI" type="file" /> 
     <button id="newProviderButton" type="submit" class="btn btn-success" 
      value="Enviar">Enviar</button> 
    </form> 
</body> 
<script type="text/javascript" 
    src="https://code.jquery.com/jquery-latest.min.js"></script> 
<script 
    src="http://formvalidation.io/vendor/formvalidation/js/formValidation.min.js"></script> 
<script 
    src="http://formvalidation.io/vendor/formvalidation/js/framework/bootstrap.min.js"></script> 
<script> 
    var providerId = ""; 
    function newProvider() { 

     var a = $("#providerForm")[0]; 
     var b = $("#providerForm"); 
     var c = new FormData($(b)[0]); 
     var d = document.getElementById('providerForm'); 
     var dataT = new FormData(d); 
     var params = $('#providerForm').serializeArray(); 
     c.append("file",$($(a).find("#fileI"))[0]); 
     $.each(params, function(i, val) { 
      dataT.append(val.name, val.value); 
      console.log(val.name + ": " + val.value); 
     }); 
     $.ajax({ 
        type : "POST", 
        beforeSend : function(request) { 
         request.setRequestHeader("Content-Type", 
           "multipart/form-data"); 
        }, 
        url : "../services/user/profile/upload/image", 
        data : dataT, 
        cache : false, 
        contentType : false, 
        processData : false, 
        success : function(msg) { 
         if (msg.message == "OK") { 
          mAlert({ 
           container : $("#providerForm"), 
           message : 'Usuario registrado correctamente', 
           type : 'success', 
           okButton : 'OK' 
          }); 
         } 
        }, 
        statusCode : { 
         401 : function() { 
          window.location.replace("../entrance.jsp"); 
         } 
        } 
       }); 

    } 
    $(document).ready(function() { 
     $("#providerForm").on('reset',function(){ 
      $(this).data('formValidation').resetForm(true); 
     }); 
     $('#providerForm').formValidation({ 
       framework: 'bootstrap', 

       icon: { 
        valid: 'glyphicon glyphicon-ok', 
        invalid: 'glyphicon glyphicon-remove', 
        validating: 'glyphicon glyphicon-refresh' 
       }, 
       fields: {} 
      }) 
     .on('success.form.fv', function(e) { 
       // Prevent form submission 
       e.preventDefault(); 

       var $form = $(e.target), 
        fv = $(e.target).data('formValidation'); 

       // Do whatever you want here ... 

       // Then submit the form as usual 
       newProvider(); 
       //fv.defaultSubmit(); 
      }); 
    }); 
</script> 
</html> 

:

내가에 사용하고 코드입니다.

enter image description here

당신은 내가 다른 방법 througt는 HTMLElement를 받고, 심지어 FormData = {}

편집 요소를 개별적으로 결과 ID를 추가하는 시도 볼 수 있듯이 :

내가 필요로하는 FormData multipart/form-data 형식의 인코딩

답변

0

jQuery를 사용하는 경우 (태그가있는 경우) 요 대신에 form.serialize()을 사용해보십시오 ur $. 각 데이터가 추가됩니다.

+0

그럼 multipart/form-data 인코딩에서 FormData가 필요합니다. –

+0

좋은 점, 시도해 보셨습니까? var formData = new FormData(); formData.append ('file', $ ('fileI'). files [0]); – Craig

+0

"c.append ("file ", $ ($ (a) .find ("# fileI ") [0]);"를 사용하지만 여분의 $()가 필요하지 않습니까? – Craig

1

파일을 업로드 할 수있는 가장 좋은 방법은 아약스하지,하지만 당신이 그렇게하고 싶다면, 당신이 속하는 튜토리얼을 따라 할 수

http://blog.teamtreehouse.com/uploading-files-ajax

파일을 업로드하는 가장 좋은 방법은 전통적인 방법이다, enctype="multipart/form-data"으로 웹 사이트를 새로 고치는 것으로 양식을 만드는 것은 매우 간단하지만 그렇게하는 가장 좋은 방법입니다.

감사합니다.

+0

Radames 감사합니다. 그럼 어떻게 생각하세요? –

+0

세르지오, 파일을 업로드하는 가장 좋은 방법은 전통적인 방법입니다. enctype = "multipart/form-data"로 웹 사이트를 새로 고치는 방법은 매우 간단하지만 최선의 방법은 같습니다. –

+0

확인. 나는 그 페이지를 새롭게하지 않으려 고 노력하고 있었지만 나는해야한다고 생각한다. 감사! –

관련 문제