登录  /  注册
首页 > web前端 > js教程 > 正文

ajaxfileupload.js上传文件后调用error函数该如何处理

一个新手
发布: 2017-09-18 10:04:39
原创
1596人浏览过

今天用ajaxfileupload.js上传文件时,用到了一个让人很郁闷的事情,就是无论上传文件成功与否,总是调用error回调函数,一直不用心success函数。

代码如下:

//上传文件
$("#CompChange").click(function() {
  var params = $("#CompchangeTable").serialize();
  var json0={'video.slogan':$('#Cbasic_score').val(),'video.videoKind':$("#Cextra_score").val(),
		  'video.videoName':$("#name").val()};

  $.ajaxFileUpload({  
	    type: "POST",  
	    url: "adminAction-upFile.action",  
	    data:json0,//要传到后台的参数,没有可以不写  
	    secureuri : false,//是否启用安全提交,默认为false  
	    fileElementId:['file1','file2'],//文件选择框的id属性  
	    dataType: 'json',//服务器返回的格式  
	    async : false,  
	    success: function(data){  
              alert("成功");
	    },  
	    error: function (data, status, e){  
	         alert("失败");
	    }  
	});
  });
登录后复制

上传后会报错:


从报错上看可能是多了一个"<"符号。经过大量的尝试后,终于发现了不对劲的地方。我是把dataType的类型换成了context类型,并在success函数中打印出data。

结果是:


你回发现返回的数据中有

标签,问题终于找到了,原来是JSon格式,但是返回的格式明显不是JSon格式,在网上查了一下才知道有时候后台必须要则么做,所以只能找别的方法了,最后就在ajaxfileupload.js文件里发现了这个:</p><pre class="brush:js;toolbar:false;">		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"){		
				eval("data = " + data);
			}
			// evaluate scripts within html
			if (type == "html")
				jQuery("<p>").html(data).evalScripts();

			return data;
		}
登录后复制

这就返回的值,返回JSon格式时,它直接把数据赋值,这肯定是不行的,所以我们要做修改:

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 = 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 = " + data);
			}
			// evaluate scripts within html
			if (type == "html")
				jQuery("<p>").html(data).evalScripts();

			return data;
		}
登录后复制

我们把中间的截取出来就行了。

这就是我的解决方法,希望对其他人也有用。

以上就是ajaxfileupload.js上传文件后调用error函数该如何处理的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号