ajaxfileupload.js回调异常

上传文件时采用了ajaxfileupload.js来做处理,但是数据上传成功之后原本写好的回调函数并未被调用,经过分析与查证,确认是ajaxfileupload.js内部方法问题,现将解决方案贴出如下:

$.ajaxFileUpload(
            {
                url:"../empty,
                secureuri:false,
                fileElementId:"file_ele_id",
                dataType: "text",
                success: function (data,status){
                    var rx = new RegExp("<pre.*?>(.*?)</pre>","i");
                    var am = rx.exec(data);
                    data = (am) ? am[1] : "";
                    eval("data = " + data );
                    alert(data.msg);
                    if(status){
                        CloseWindow("ok");
                    }
                },
                error: function (jqXHR, textStatus, errorThrown)
                {
                    alert(errorThrown);
                    CloseWindow();
                }
            });
}
原回调异常方案如下:

$.ajaxFileUpload(
            {
                url:"../em,
                secureuri:false,
                fileElementId:"file_ele_id",
                dataType: "json",
                success: function (data,status){
                    alert(data.msg);
                    if(status){
                        CloseWindow("ok");
                    }
                },
                error: function (jqXHR, textStatus, errorThrown)
                {
                    alert(textStatus);
                    CloseWindow();
                }
            });
}
异常原因分析为ajaxfileupload.js内以下代码对type为json时对data的不当处理引起,因为后台传至界面的json数据已经被<pre style=">json<pre/>给围起来了,eval()函数在处理data时抛出了异常并在ajaxfileupload.js内部进行了try{}catch(){}为error,所以即便后台返回的是处理成功的json,回调函数依然走的是error

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 );
       // eval('(' + data + ')');//eval("\""+data+"\"");
    }
    // evaluate scripts within html  
    if ( type == "html" )  
        jQuery("<div>").html(data).evalScripts();  
        //alert($('param', data).each(function(){alert($(this).attr('value'));}));
    return data;
} 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值