实现上传文件功能中遇到的兼容问题

WEB开发项目用了Sencha touch开发,有点奇葩,原因不多说,讲问题。项目中遇到文件上传的功能:在一个表单里选择上传文件、填写文件相关信息,点击按钮上传文件,保存文件相关信息。
功能界面图
遇到兼容问题如下:

1、FireFox对form.submit()方法不兼容,应使用submit按钮提交,尽量避免使用submit方法提交。
2、sencha touch 中的Ext.form.Panel.submit()方法来实现上传,核心代码如下。

view_fileAdd_Edit.submit({ //view_fileAdd_Edit为表单对象
            url: 'servlet/UploadServlet', //处理文件url
            method: 'Post', 
            waitMsg:"请稍等,正在进行上传!",
            success: function(form, result, data) { 
            Ext.Msg.show({
                title: '操作结果',
                message: result.msg,
                width: 300,
                });
            }, 
            failure: function(form, result, data) { 
            Ext.Msg.show({
                title: '操作结果',
                message: result.msg,
                width: 300,
            });
            } 
        });

在Chrome能正常使用,但在IE、FireFox下出现问题:不能跳转到url,直接进入failure。原因我猜测是跟submit()方法的兼容有关。问题解决办法:Sencha touch使用JS实现的,能兼容其他JS方法。我使用的是Jquery的ajaxfileupload.js插件。代码如下:

var data = view_fileAdd_Edit.getValues(); //取表单中文件相关信息                   
$.ajaxFileUpload({
    url:'servlet/UploadServlet',//处理文件url
    secureuri :false, //是否为安全提交
    fileElementId :'file',//file控件id
    dataType : 'json', //数据类型
    data: data, //文件信息做为参数传递到后台
    success : function (data, status){
            if(typeof(data.success) != 'undefined'){
                if(data.success == "true"){
                    Ext.Msg.show({
                        title: '操作结果',
                        message: data.msg,
                        width: 300,
                        });                                         
                }else{
                    Ext.Msg.show({
                        title: '操作结果',
                        message: data.msg,
                        width: 300,
                        });
            }
        }                                   
    },
    error: function(data, status, e){
            Ext.Msg.show({
                title: '添加失败',
                message: e,
                width: 300,
            });             
    }
});

ajaxfileupload.js插件同样存在兼容问题:
1、IE下文件上传成功,但总是进入error,在ajaxfileupload.js中的下面一句代码报错。

 if ( type == "json" )
     eval( "data = " + data );

改为

if ( type == "json" )
    eval("data = eval(" + data + ")");

即可。
2、修改后在IE能正常使用,但在FireFox下依然会报错:SyntaxError: syntax error。观察responseText的内容(如下图所示)发现json信息被包含在pre标签中,故出现syntax error。
这里写图片描述
解决办法:去掉pre标签。修改ajaxfileupload.js如下:

    if ( type == "json" )
         //去掉pre标签的代码
         data = r.responseText;  
         var start = data.indexOf(">");  
         if(start != -1) {  
            var end = data.indexOf("<", start + 1);  
            if(end != -1) {  
                data = data.substring(start + 1, end);  
            }  
         }   
    eval("data = eval(" + data + ")");

修改后IE、FireFox、Chrome均能正常使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值