六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 46|回复: 0

jquery使用ajax方式上传附件

[复制链接]

升级  86.67%

46

主题

46

主题

46

主题

秀才

Rank: 2

积分
180
 楼主| 发表于 2013-1-29 08:42:48 | 显示全部楼层 |阅读模式
一) 项目上需要,要用到jquery使用ajax方式上传附件的方式。
经查找,得到一个名为ajaxFileUpload的插件。
翻阅官方文档发现用法简单。

<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script><script type="text/javascript" src="js/ajaxfileupload.js"></script>

$.ajaxFileUpload({url: "teamwork/newTaskAttachmentUpload",secureuri: false,fileElementId: "attachment",dataType: "json",beforeSend: function() {},success: function(json) {alert(json.fileName);}});

二) 使用发现dataType设置成"json"时success指定的函数是不能响应的。
非常奇怪,经过Firebug调试得知,后端传来的json字符串被"<pre></pre>"包裹一下了。
如:{"name":"应卓", "age":"30"}被包裹成了"<pre>{"name":"应卓", "age":"30"}</pre>"
导致不能正确地生成json对象。

具体原因未知,有可能是这个插件与jquery1.7.2不兼容所致。

三) 由于这个插件的源码不是gzip压缩版本,还有修改的可能。 找出相对应的源码。
源码修改如下,可解决问题。

    // ......    uploadHttpData: function( r, type ) {        var data = !type;        data = type == "xml" || data ? r.responseXML : r.responseText;        // 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" ) {        // -------------------------------------------------------------        // 哥修改的地方,加了一条语句。        data = data.substring(5, data.indexOf("</pre>"));        // -------------------------------------------------------------            eval( "data = " + data );        }        // evaluate scripts within html        if ( type == "html" )            jQuery("<div>").html(data).evalScripts();        return data;    }})
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表