近来,项目有个小需求需要使用到Ajax异步上传文件,本来Ajax是不支持上传文件的,但是可以通过IFrame技术模拟实现,异步提交,原理实际上就是利用了一个隐藏的Iframe子窗体,把提交的表单的target指向这个隐藏的窗体,在提交时,浏览器的头部还会出现加载信息,但是页面却没有任何刷新,勉强实现了Ajax的异步上传。
好了,下面开始进入正题,散仙简单记录下,究竟该怎么使用Ajax异步上传文件,在实现的过程中,也遇到了一些小问题,总算皇天不负有心人,都一一解决,今记录在此,免后继者重蹈折。
实现这个功能,需要jquery的一个js文件,如下所示:
ajaxfileupload.js
首先,我们需要把这个包导入工程中,当然还得有Jquery的核心包,然后我们就可以使用ajax上传的功能了,代码如下:
function clickExecute(){
//提交表单
$.ajaxFileUpload(
{
url:'workXmlAtuo',//用于文件上传的服务器端请求的Action地址
type:"post",//请求方法
secureuri:false,//一般设置为false
fileElementId:'upload',//文件id属性 <input type="file" id="upload" name="upload" />
dataType:"JSON",//返回值类型 一般设置为json,一定要大写,否则可能会出现一些bug
success:function(msg) {
// alert(msg.length);//从服务器返回的json中取出message中的数据,其中message为在struts2中定义的成员变量
$.each(msg,function(k,y){
$("#id").append("<option >"+y+" </option>");
});
}
}
);
}
散仙的后台是Struts2的Action,后台就是我们常规的一些写法,因为使用了Ajax提交,所以就没必要在前台代码里写入form表单来提交了,后台部分代码如下:
/**
* 上传的文件名
* **/
public List<File> upload;
private List<String> uploadFileName;//注意要与文件名一致
private List<String> uploadContentType;//文件类型一致
/***
*
* 使用Gson
* 把集合数据转成
* json
*
* **/
Gson g=new Gson();
HttpServletResponse r=ServletActionContext.getResponse();
// System.out.println("解析列:"+columns);
ServletActionContext.getResponse().setCharacterEncoding("UTF-8");
ServletActionContext.getResponse().setContentType("application/json;charset=utf-8");
r.getWriter().print(g.toJson(columns));
然后,就可以正常使用了。
使用过程中,发现2个问题:
问题一,在使用ajax上传时,dataType类型,最好写成大写的JSON,散仙一开始的时候写的小写结果,发现不能正常使用,可能是一个bug。
解决办法就是把dataType的值写成大写的JSON,即可。
问题二, 在json的集合数据返回到前台是,数据上莫名其妙的带了个pre的html标签,导致无法正常解析json,这个异常散仙在网上也找了一些解决办法,通常的是把后台的setContentType里面设置头部信息为text/html,经过此步,pre标签的问题是可以解决了
但是在前台的时候,仍不能正常显示,最后改了ajaxfileupload.js的源码,此问题得以解决。
解决办法如下图所示:
至此,所有问题都得到解决,最后散仙附上ajaxfileupload.js文件,希望能够对正在使用中的朋友有所帮助。
- 大小: 88.4 KB
分享到:
相关推荐
ajax异步上传文件实现,主要是使用h5的技术,大家可以试试看
很好的ajax异步上传插件是jquery
ajax异步上传文件插件,ajax异步上传文件插件,ajax异步上传文件插件,无奈要50个字
asp.net ajax异步上传文件 代码是从一系统中取出来的并作了修改..感觉非常好用,借助此demo还可以实现异步读取信息 验证用户名 更改信息等... 如出现object error错误 请检查function.js submitUrl参数的提交路径...
ajax 异步上传 需要的js文件 ajax 异步上传
很简单,很实用的异步上传插件,有需要的可以下载
SpringMVC+Ajax异步文件上传+短视频背景+a标签绑定文件域
ajax异步文件上传,servlet处理
JavaScript js Ajax 异步 上传文件 包含servlet action 以及JSP 代码
codeproject中介绍的使用jquery ajax异步上传文件,demo使用mvc方式
Ajax上传文件Demo以及Ajax上传文件前的预览效果实现。详情见博客http://blog.csdn.net/u012702547/article/details/77585111
AJAXFileUpload ajax 异步文件上传 进度条AJAXFileUpload ajax 异步文件上传 进度条
主要介绍了Ajax异步上传文件实例代码,非常不错具有参考借鉴价值,需要的朋友可以参考下
2、说是AJAX异步,其实也是通过创建IFRAME,然后提交表单。 3、保存的时候通过获取文件头判断上传文件的类型。 4、本来想采用设计模式的,后来把一些信息放入XML之后,感觉没必要用设计模式了。
struts2+jquery+ajax实现了文件的异步上传,的MyEclipse编写的简单项目
NULL 博文链接:https://1197581932.iteye.com/blog/2330457
做前台页面时,需要调用WebAPI的Post请求,发送一些字段和文件(相当于把表单通过ajax异步发送出去,得到返回结果),然后得到返回值判断是否成功。 2.尝试 先是尝试了一下 “jQuery Form Plugin” ,这玩意就是的...