使用插件ajaxfileupload通过ajax方式上传文件,在火狐下出错


======================================================
注:本文源代码点此下载
======================================================

以前网站要实现了一个在线预览文件的功能,其中后台管理时用到了ajax上传。我用的是一个jquery插件ajaxfileupload.js

今天同事使用时突然报错了(以前没有问题,我们用的都是火狐浏览器,后来我让她用其他浏览器没有问题),我试了一下也出错了。alertsyntaxerror: missing ; before statementerror 这个应该是js语法错误。记得当时也出现过这个错误,不过后来怎么解决的忘记了(当然也可能是我记错了可能)。

调用ajaxfileupload上传的部分代码如下

1 $.ajaxfileupload

2(

3{

4url:'eb_price.php?'+parm,

5secureuri:false,

6fileelementid:'f_file',

7datatype: 'json',

8success: function (data, status)

9{

10fun(data)

11},

12error: function (data,status,e)

13{

14alert(e+status)// 商品;

15

16}

17}

18);

经过分析是在调用jquery.uploadhttpdata( xml, s.datatype ); 由于语法错误抛出了异常

view code

1try {

2status = istimeout != "timeout" ? "success" : "error";

3// make sure that the request was successful or notmodified

4if ( status != "error" )

5{

6// process the data (runs the xml through httpdata regardless of callback)

7var data = jquery.uploadhttpdata( xml, s.datatype );

8// if a local callback was specified, fire it and pass it the data

9if ( s.success )

10s.success( data, status );

11

12// fire the global callback

13if( s.global )

14jquery.event.trigger( "ajaxsuccess", [xml, s] );

15} else

16jquery.handleerror(s, xml, status);

17} catch(e)

18{

19status = "error";

20jquery.handleerror(s, xml, status, e);

21}

由于要返回的数据类型是datatype:'json'格式的;感觉错误出在json字符串的解析上面。即把json格式的字符转换为对象;

uploadhttpdata: function( r, type ) {

var data = !type;

bug(r);//bug为封装的firebug的console.log();

data = type == "xml" || data ? r.responsexml : r.responsetext;

bug(data);

// if the type is "script", eval it in global context

if ( type == "script" )

jquery.globaleval( data );

// get the javascript object, if json is used.

if ( type == "json" )

eval( "data = " + data );

// evaluate scripts within html

if ( type == "html" )

jquery("

").html(data).evalscripts();

return data;

}

两次输出的结果如图

可以看到 第二次bug(data);data的内容多出了一段html代码,都这样了不错才怪呢。这段代码我看着很熟悉,突然想到了。好像是火狐的魔镜插件,嵌入的;

在firebug的网络面板中,可以看到返回的数据貌似是正常的

只不过后来又遭到了修改。

你随便打开一个网页在firebug中可以看到这个隐藏的div;

现在一切都清楚了,

我同事之所以以前用火狐没事,现在突然出现了这个问题,,就是因为两天前 火狐魔镜升级了。(貌似你以前没有安装魔镜,在这次更新过程中,会自动安装。此前把魔镜禁用了,升级为火狐应用中心后,它就成了启用状态了。这只是我的猜想)。

另外这个插件肯定不会在每次请求中都会嵌入代码;这段代码跟播放视频的播放器有关系,通过它在播放器周围显示一个框框,提示你可以单独拿出来播放。

插件之所以会在ajax上传后返回的结果中嵌入,是因为ajaxfileupload中的ajax并不是我们平时所用的那个ajax。它只是创建了一个隐藏的iframe,并在里面创建了表单文件域的等,把文件提交到服务器。然后将iframe中的内容,即web服务器返回的结果,经过处理返回给调用它的代码。

解决方法:

1.换浏览器。(因为这个功能只是我们的后台人员在用,当然可以这么做^_^)

2.卸载插件。

3.js判断是否存在此代码。若存在替换为空字符串;

不过最好的方式还是这个插件不要修改原来网页的结构。感觉在实现原来效果的情况下,而不修改结构是可以实现的。

2011 8.19 昨晚回到家后去火狐社区逛了一圈。遇到这个问题的不光是我一个。会在fckeditor编辑器里插入那个用于弹出视频的代码

并有回复:问题已经修复已发布5.0.1版 – 超 频


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值