木头人的gravatar头像
木头人 2017-09-28 22:36:16
ajaxFileUpload上传文件返回json无法解析

       最近做一个文件上传的功能,还要绑定数据传输到后台,为了不影响前端的体验,采用ajax发送请求。找了一些资料,网上的用ajaxupload这个插件。

       但是无论成功还是失败都是执行的error的回调函数。后台我采用springmvc返回的json,在前段debug后发现,原来返回的虽然是json格式,但是它又包装了一层。

<pre style="word-wrap: break-word; white-space: pre-wrap;">{"retcode":"0"}</pre>

        没办法查了好多资料发现有的大牛也遇到了这个问题,有的还琢磨了好几天。看了一下github上的源码是6年前上传的,发现有一个大牛2016.11.15号对源码修改了下解决了这个问题。

 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" )
        {
            // If you add mimetype in your response,
            // you have to delete the '<pre></pre>' tag.
            // The pre tag in Chrome has attribute, so have to use regex to remove
            var data = r.responseText;
            var rx = new RegExp("<pre.*?>(.*?)</pre>","i");
            var am = rx.exec(data);
            //this is the desired data extracted
            var data = (am) ? am[1] : "";    //the only submatch or empty
            eval( "data = " + data );
        }
        // evaluate scripts within html
        if ( type == "html" )
            jQuery("<div>").html(data).evalScripts();
        //alert($('param', data).each(function(){alert($(this).attr('value'));}));
        return data;
    }

估计原作者对代码估计也没维护了。我最后还找到了大牛们的另一个解决办法:在ajaxFileUpload.js中的uploadHttpData方法中修改对json的判断:

ajaxFileUpload上传文件返回json无法解析

这里只是记录下防止自己忘记哈


打赏

已有1人打赏

最代码官方的gravatar头像
最近浏览
1248612588  LV1 2019年10月22日
huyii100  LV1 2019年5月5日
linzheng  LV3 2019年5月1日
chenyukang  LV2 2019年4月29日
liuyuheng  LV17 2019年3月27日
2036085yy  LV1 2018年12月20日
低调人  LV38 2017年12月17日
NormanAda 2017年11月27日
暂无贡献等级
zdm128136  LV8 2017年11月24日
taojava  LV3 2017年11月10日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友