近来,项目有个小需求需要使用到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异步上传则不同,它通过JavaScript创建XMLHttpRequest对象,利用这个对象向服务器发送请求,然后在后台处理数据,最后将响应结果回传到客户端,整个过程不会刷新页面,提供更好的用户体验。 jQuery库为开发者...
至于提供的压缩包文件“package.xml”和“xhprof-0.9.2”,它们似乎与Ajax异步文件上传的主题不直接相关。“package.xml”可能是某种软件或项目的配置文件,而“xhprof-0.9.2”可能是一个性能分析工具,如PHP的...
**Ajax异步上传文件插件详解** 在现代Web开发中,用户交互的实时性和流畅性是提升用户体验的关键因素之一。Ajax(Asynchronous JavaScript and XML)技术的出现,使得页面无需刷新即可实现数据的异步更新,极大地...
asp.net ajax异步上传文件 代码是从一系统中取出来的并作了修改..感觉非常好用,借助此demo还可以实现异步读取信息 验证用户名 更改信息等... 如出现object error错误 请检查function.js submitUrl参数的提交路径...
ajax 异步上传 需要的js文件 ajax 异步上传
很简单,很实用的异步上传插件,有需要的可以下载
2. **Ajax异步文件上传** - **FormData对象**:在前端,我们需要使用`FormData`对象来封装待上传的文件,然后通过`XMLHttpRequest`或`fetch` API来发送异步请求。 - **事件监听**:`Ajax`可以监听文件上传的进度,...
总结起来,Spring MVC提供了方便的文件上传支持,无论是传统的HTTP表单提交还是Ajax异步上传,都能轻松应对。了解并掌握这些技术,对于开发高效、用户体验优秀的Web应用至关重要。在实际应用中,还需要注意文件大小...
为了解决这一问题,Ajax异步上传文件应运而生。本教程将通过一个名为"AJaxUpFileTest"的示例项目,详细介绍如何利用JavaScript的FormData对象和Ajax技术实现无刷新的批量文件上传。 首先,我们来看`AJaxUpFileTest`...
在现代Web应用中,用户经常需要上传文件,如图片、文档等。为了提供更好的用户体验,开发者通常会采用AJAX(Asynchronous JavaScript and XML)技术实现异步文件上传,避免传统方式下页面刷新带来的中断感。AJAX允许...
然后,从JavaScript的角度来看,实现Ajax异步上传文件的核心在于使用XMLHttpRequest对象或者更简单的封装库如jQuery。本实例中使用了jQuery的$.ajax()方法,它简化了Ajax的使用。$.ajax()方法通过指定一系列的参数来...
在“Ajax上传文件Demo”中,我们将探讨以下几个关键知识点: 1. **HTML表单设计**:首先,我们需要一个HTML表单让用户选择要上传的文件。`<input type="file" id="fileInput">` 是一个基本的文件选择控件,`id`属性...
综上所述,"Servlet图片批量上传ajax异步上传"是一个完整的Web应用开发场景,涵盖了从前端的无刷新用户体验,到后端的文件处理,再到数据的JSON交换。这个Demo的实现可以帮助开发者理解如何在实际项目中整合这些技术...
Struts2、jQuery和Ajax是Web开发中的三个关键组件,它们共同构成了文件异步上传的基础框架。这个项目是在MyEclipse环境下实现的一个简单的文件上传功能,让我们深入了解一下这些技术及其在文件上传中的应用。 首先...
在IT行业中,Ajax异步上传是一种常见的网页交互技术,它允许用户在不刷新整个页面的情况下进行数据的上传,显著提升了用户体验。Ajax(Asynchronous JavaScript and XML)的核心是利用JavaScript实现局部刷新,结合...
"Ajax异步上传(带进度条)"就是一种能够提供流畅用户体验的上传方式,它允许用户在不刷新整个页面的情况下进行文件上传,并通过进度条实时显示上传进度。这种方式相比传统的表单提交方式,用户体验更佳,因为它避免...
这个"java做的ajax异步上传 图片或文件的demo"为我们提供了一个基于Java后端和Ajax前端技术的实现示例,用于演示如何在Eclipse集成开发环境中配置并运行一个这样的应用。下面,我们将深入探讨相关的知识点。 首先,...