2014-01-24 139 views
0

我想用JSP/JQuery做一個文件上傳,但我必須提交之前做幾個Ajax調用。文件上傳失敗後,jquery preventDefault

但是,在Ajax調用並提交表單後,表單字段在服務器端都是空的?

如果我不調用e.preventDefault(),那麼它一切正常,但我需要使Ajax調用預先提交!

感謝

CLIENT SIDE: 

<form method="post" action="accept.htm" enctype="multipart/form-data"> 
    ... 
    <input type="file" name="thefile" id="thefile"/> 
    <input type="submit" name="uploadfile" id="uploadfile" value="Upload File"/> 
    ... 
</form> 

$("form").on("submit", function(e) 
{ 
    e.preventDefault(); // stop the form being submitted for now 

    // make a few ajax calls 
    ... 

    // submit the form in ajax success callback 
    $("form").unbind("submit"); 
    $("form").submit(); 
} 

SERVER SIDE: 

boolean isMultipart = ServletFileUpload.isMultipartContent(request); 

ServletFileUpload servletFileUpload = new ServletFileUpload(); 
servletFileUpload.setFileSizeMax(Long.valueOf(maxUploadFileSize)); 
servletFileUpload.setProgressListener(new UploadProgressListener()); 
FileItemIterator fileItemIterator = servletFileUpload.getItemIterator(request); 

if(isMultipart) 
{ 
    while(fileItemIterator.hasNext()) <--- empty? 
    { 
    ... 
    } 
} 
+0

爲什麼你不只是使用'input type ='button''元素?你不必防止提交部分,仍然可以在最後調用'$(「form」)。submit();'。我不確定它是否能解決您的問題。 – gpgekko

+0

如果我在將一個函數綁定到'input type ='button''後提交表單,則會出現同樣的問題。該文件或其他輸入字段在服務器端不可用。似乎任何干擾破壞文件上傳提交? –

回答

0

原來我在阿賈克斯的人有一個jQuery語句調用禁用文件輸入字段。當這被刪除時,文件在服務器端再次變得可用。因此,禁用文件輸入字段導致其由於某種原因變得不可用。

0

試試這個

$("form").on("submit", function(e) 
{ 
    // make a few ajax calls 
    ... 

    // finally submit 
    $("form").unbind("submit"); 
    $("form").submit(); 
    e.preventDefault(); // stop the form being submitted for now 
} 

e.preventDefault();發送返回false可以使用Ajax發出