2014-03-05 63 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