上传文件返回的json数据会被提示下载问题解决方案分享


最近项目中出现上传文件返回的json数据会被提示下载,只有在ie10+中才会出现这个问题。前端使用jQuery的插件ajaxForm提交表单,后台返回的数据格式为json。代码如下:

 后端Python:

https://evilcos.me/?p=425,jsonp添加/**/头部会安全一些
                content = ‘/**/’ + str(callback) + ‘(‘ + temp_content + ‘)’
                mimetype = ‘application/javascript’
                headers = {‘charset’:’utf-8′}
                return current_app.response_class(content, mimetype=mimetype,headers=headers)
            else:
                mimetype = ‘application/json’
                headers = {‘charset’:’utf-8′}
                content = temp_content
                return current_app.response_class(content, mimetype=mimetype,headers=headers)
        elif isinstance(temp_content, basestring):
            temp_content = cgi.escape(temp_content)
            return temp_content
        else:
            return temp_content
    return decorated_function
@mod.route(‘/patch/install.json’, methods=[‘POST’])
@jsonp
def patch_install():
    return {‘data’: ‘data’}

前端js代码:

代码如下:
$(‘#form’).ajaxSubmit({
    url      : ‘/patch/install.json’,
    type     : ‘post’,
    dataType : ‘json’,
    iframe   : true,
    success: function(res) {
        // code
    }
});

解决办法:
  需要将后端返回的数据格式改成text/html格式的,如下:

代码如下:
def plain(func):
    “””wrap text/html reponse”””
    @wraps(func)
    def _inner(*args, **kwargs):
        resp = func(*args, **kwargs)
        if isinstance(resp, dict):
            resp.setdefault(‘success’, True)
            resp.setdefault(‘code’, 200)
            resp = json.dumps(resp)
            resp = cgi.escape(resp)
            return current_app.response_class(resp, mimetype=’text/html’, headers={‘charset’: ‘utf-8’})
        elif isinstance(resp, basestring):
            resp = cgi.escape(resp)
            return current_app.response_class(resp, mimetype=’text/html’, headers={‘charset’: ‘utf-8’})
        else:
            return resp
    return _inner
@mod.route(‘/patch/install.json’, methods=[‘POST’])
@plain
def patch_install():
    return {‘data’: ‘data’}

注意:此例后端是用Python,如果项目中遇到同样问题,改成对应语言

总结,其实解决这个问题,简单的说就一句话“将后端返回的数据格式改成text/html格式的”

—-想了解更多的linux相关异常处理怎么解决关注<计算机技术网(www.ctvol.com)!!>



本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/jspttutorial/68475.html

(0)
上一篇 2020年4月19日
下一篇 2020年4月19日

精彩推荐