一) 项目上需要,要用到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;
- }
- })