2014-09-05 102 views
0

我现在用的是典型的形式上传文件功能,使用Servlet等之后,在客户端的响应保持在这里 http://www.tutorialspoint.com/servlets/servlets-file-uploading.htm获取文件上传请求

客户端代码

<html> 
<head> 
<title>File Uploading Form</title> 
</head> 
<body> 
<h3>File Upload:</h3> 
Select a file to upload: <br /> 
<form action="UploadServlet" method="post" 
         enctype="multipart/form-data"> 
<input type="file" name="file" size="50" /> 
<br /> 
<input type="submit" value="Upload File" /> 
</form> 
</body> 
</html> 

的问题在于,在服务器端,我将json输出写入响应对象(流)。在客户端,它正在做一个重定向。基本上,重定向到一个只显示json输出的页面。

在客户端,我如何控制响应?我想解析JSON并对它做些什么,但是我找不到“钩子”或如何获得输出。我使用Javascript和HTML我的客户端(和AJAX如果可能)

谢谢

+0

的onsubmit ......防止违约或返回false – cocco 2014-09-05 16:44:33

+0

使用Ajax来上传文件。 http://blog.teamtreehouse.com/uploading-files-ajax – 2014-09-05 16:45:44

+0

如果你有一个AJAX处理程序,让我们来看看它。否则,你似乎在要求我们做你的工作。[Learn ajax](http://www.w3schools.com/jquery/jquery_ajax_intro.asp) – ncksllvn 2014-09-05 16:46:57

回答

0

Ajax的功能

//url,callback,type,FormData,uploadFunc,downloadFunc 
function ajax(a,b,e,d,f,g,c){ 
c=new XMLHttpRequest; 
!f||(c.upload.onprogress=f); 
!g||(c.onprogress=g); 
c.onload=b; 
c.open(e||'get',a); 
c.send(d||null) 
} 

https://stackoverflow.com/a/18309057/2450730 适用于所有最新的浏览器,包括移动。

就绪功能

function rdy(){ 
console.log(this.response)// or JSON.parse(this.response) if json 
} 

进展

function progressup(e){ 
console.log(e.loaded/e.total)// or (e.loaded/e.total*100|0)+'%' to get the percent 
} 

设置形式

假设您的形式是第一位的,你只是阻止它的默认行为,创造一个自定义乐趣在这种情况下,ajax发送表单。

window.onload=function(){ 
document.forms[0].onsubmit=function(e){ 
    e.preventDefault(); 
    ajax('upload.php',rdy,'post',new FormData(this),progressup) 
} 
} 

这是你所需要的,因为你可以看到代码是短暂的...但它有你需要的一切。

注:每一种类型的形式被接受......所以你不必...这得益于采用new FormData()

编辑费心编写额外的代码来读取表单值

而且表单本身并不需要所有这些额外的属性。

这就够了......(没有方法,行动,加密类型)

<form><input type="file" name="file"><input type="submit" value="GO"></form> 

或者添加多个到您的文件称输入上传多个文件。

<input type="file" name="file" multiple> 

,如果您有任何问题,只是问

+0

谢谢cocco,但我注意到你在这里调用php函数。我的后端没有PHP。只有servlet收到请求 – Snake 2014-09-05 17:14:37

+0

哦,当然...只是改变位置。用正确的上传地址替换upload.php – cocco 2014-09-05 17:15:59

+0

UploadServlet? – cocco 2014-09-05 17:16:32