ajaxSubmit/ajaxForm 上传文件 ie弹出提示下载信息

ajaxSubmit/ajaxForm 上传文件 ie弹出提示下载信息
通过页面将文件上传到后台的方式大家或多或少都了解一些。
主要分为3步:
1、jsp页面使用input,type为file
      2、后台使用File/MultipartFile对象接收
     3、jsp页面将input放入form表单中,同时form加上enctype="multipart/form-data"这一属性
  之后将该表单提交,后台即可接收到文件对象。
  这样虽然满足了部分需求,但是如果需要在后台进行判断,然后返回页面的话,就不满足需求了。即使后台使用rederHtml(),由于表单已经提交,页面也会进行一次刷新。
  这时就需要用到ajax提交文件到后台了,有些人认为只要把ajax的data属性直接使用$("#frm").serialize(),就可以将整个表单包括文件提交到后台了,其实不然,这个方式是无法将文件流也提交到后台的。
  其实将文件提交的后台也简单,只需要用比较新的jquery(支持FormData),将整个表单封装为FormData对象,然后加上contentType: false, processData: false,这两个ajax的属性就可以了,ajax其实默认都是以字符流传输数据到后台,加上这两个意思就是告诉后台,我传的是一个对象,就可以直接用文件对象接收到了。例:
var formData = new FormData(document.getElementByIdx_x_x("formFile"));
$.ajax({
type: "post",
url: "sysupload!upload.iframe",
data: formData,
cache: false,  
        contentType: false,  
        processData: false,
       dataType: "text",
async: false,
success: function(data){
var json = eval_r("("+data+")");
window.location.href = json.msg;
},
error: function(){
;
}
});
但是这个方法有一个问题,不兼容ie,浏览器控制台一直报“formData”对象未定义,硬伤,没百度到,所以改用其他方式,就是jquery.form.js中的ajaxSubmit。
首先,引入1.6-1.12版本的jquery,和最新的jquery.form.js。
这里要注意的是jquery2.0版本及其以上都不兼容jquery.form.js。所以版本要引入对了。
然后就是使用ajaxSubmit方法来将表单提交到后台。用法和ajax相似,只是data就是表单,不用这个参数了。例:
var ajax_option={
iframe: true,
type: "post",
url: "sysupload!upload.iframe",
async: false,
cache: false,  
        contentType: false,  
        processData: false,
dataType: "text",
    success:function(data){
        var json = eval_r("("+data+")");
if (!json.success) {
;
}
window.location.href = json.url;
   },
    error:function(){
        ;
   }
};
$('#formFile').ajaxSubmit(ajax_option);
其实写到这一般都应该成功了。ie也可以兼容,但是这时候有些人就会出现ie会弹出提示下载信息,而且无法进入success的问题。
这个问题的官方解释是:因为是用隐藏iframe提交的表单,如果服务器返回的是“application/json”类型的数据,IE和Chrome默认是下载文件的,因为内容是返回给了iframe,而不是ajaxSubmit的success方法。
这个问题其实和ajax无关了,原因就是你的后台代码返回值是json。所以说,即使ajax中的dataType参数写的是text,其实后台代码返回的还是json,就还会弹出下载信息的提示。简而言之,前台js的dataType必须为text,同时后台返回的参数也必须是String类型的。

若你还有其他方法解决这个问题,欢迎在下方留下你的方式,大家一起讨论,一起进步,做一只有梦想的网虫!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jQuery表单插件ajaxFormajaxSubmit都是用来实现表单提交的,其ajaxForm适用于所有的表单,而ajaxSubmit只适用于表单的input、select等元素,不能包含文件上传域。 ajaxForm的使用方法: 1.引入jQuery库和jquery.form.js插件文件 ``` <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="jquery.form.js"></script> ``` 2.使用ajaxForm函数提交表单 ``` $(document).ready(function() { $('#form1').ajaxForm(function(data) { alert(data); }); }); ``` 其,#form1是表单的ID,data是服务器端返回的数据。 ajaxSubmit的使用方法: 1.引入jQuery库和jquery.form.js插件文件 ``` <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="jquery.form.js"></script> ``` 2.使用ajaxSubmit函数提交表单 ``` $(document).ready(function() { $('#form1').submit(function() { $(this).ajaxSubmit({ success: function(data) { alert(data); } }); return false; }); }); ``` 其,#form1是表单的ID,data是服务器端返回的数据。 ajaxSubmit还可以通过其他参数来设置表单提交的相关信息,如: ``` $(document).ready(function() { $('#form1').submit(function() { $(this).ajaxSubmit({ type: 'post', // 提交方式,get或post,默认为get url: 'submit.php', // 提交的URL地址 data: { // 提交的数据,键值对形式 username: 'admin', password: '123456' }, dataType: 'json', // 服务器返回的数据类型,text、xml、json等 success: function(data) { // 提交成功后的回调函数 alert(data); } }); return false; }); }); ``` 以上就是ajaxFormajaxSubmit的详细使用方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值