2014-03-05 61 views
0

我想創建一個異步文件上傳,但我打牆。下面是我在一個元素:CakePHP jQuery異步上傳

元素:

<div style="border:0px solid darkgray; width:100%; text-align: right; text-decoration: underline; font-weight: bold;"> 
    <form id="upload_form" enctype="multipart/form-data"> 
     <input type="file" accept="" id = "templatePath" name = "templatePath" name="MAX_FILE_SIZE" value="104857600"> 
     <input type="submit" value="Submit" id = "bntSubmit" name = "bntSubmit" onclick="submitFileUpload();" > 
    </form> 
</div> 

JQuery的:

function submitFileUpload(){ 
    try{ 
     var FileUrl = "/staff/passport/upload_file/"; 
     var request_timeout = 50000; 
     var formData = new FormData(); 
     var files =$('#templatePath')[0].files[0]; 

     formData.append('templatePath', files); 


     $.ajax({ 
      url: FileUrl, 
      type: 'POST', 
      timeout: request_timeout, 
      cache: false, 
      contentType: false, 
      processData: false, 
      data:formData, 
      beforeSend: function(xhr){ 

      }, 
      success: function(data) { 
       try{ 

        if(data.status =='ok'){ 

        }else{ 

        } 
       }catch(ex){ 

       } 



      }, 
      error: function(XMLHttpRequest, textStatus, errorThrown) { 


      } 
     }); 


     return false; 
    }catch(ex){ 

    } 
} 

控制器功能:

public function upload_file(){ 
    try{ 
     $this->autoRender = false; 


    } catch (Exception $e){ 
     return $this->EncodeError($e); 
    } 
} 

jquery似乎很好。擊中斷點,我可以看到對象「文件」已創建並具有文件屬性。控制器函數也被調用,但表單數據不會顯示在我的調試器中(「this」或_FILES []或任何其他變量中都沒有)。任何人都可以幫忙嗎?

感謝 傑森

+0

您的元素是否在現有表單中調用,即是否有任何機會嵌套表單? – jimmymadon

+0

是的。我試圖創建一個可重用的元素,因此它可以(並且)處於嵌套形式。 – jason

回答

0

基於您的評論,你嵌套另一種形式中的文件上傳元素。從嵌套不是有效的HTML,並會混淆瀏覽器除了不給你預期的結果。請參閱this answer

唯一的解決方案是從原始外部表單中刪除文件上載表單並將其放在外部。使用CSS使上載表單顯示在您的原始表單中。

+0

@jason是否爲你工作? – jimmymadon