麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

上傳文件返回的json數據會被提示下載問題解決方案

2019-11-20 13:50:11
字體:
來源:轉載
供稿:網友

最近項目中出現上傳文件返回的json數據會被提示下載,只有在ie10+中才會出現這個問題。前端使用jQuery的插件ajaxForm提交表單,后臺返回的數據格式為json。代碼如下:

 后端Python:

復制代碼 代碼如下:

def jsonp(func):
    """Wraps JSONified output for JSONP requests."""
    @wraps(func)
    def decorated_function(*args, **kwargs):
        callback = request.args.get('callback', False)
        temp_content =  func(*args, **kwargs)
        if isinstance(temp_content, dict):
            temp_content.setdefault('success', True)
            temp_content.setdefault('code', 200)
            try:
                temp_content = json.dumps(temp_content, indent=4)
            except UnicodeDecodeError:
                try:
                  temp_content = ujson.dumps(temp_content)
                except StandardError as e:
                  logger.exception(e)
                  temp_content = json.dumps({'success': False, 'code': 500, 'info': 'INVALID_CONTENT'})
            temp_content = cgi.escape(temp_content)
            if callback:
                # 依據 http://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格式的”

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 色中色综合 | 国产精品成人免费一区久久羞羞 | 久久欧美亚洲另类专区91大神 | 日本一区二区不卡在线观看 | 精品久久久久久久久久久αⅴ | 得得啪在线视频 | 欧美一区二区精品夜夜嗨 | 国产精品成人av片免费看最爱 | 91真视频| 中国精品久久 | 成人在线视频一区 | 欧美日本综合 | 国产毛片毛片 | xp123精品视频 | 精品国产一区二区亚洲人成毛片 | 欧美一级毛片大片免费播放 | 91,视频免费看 | 污在线观看网站 | 日韩精品久久久久久久电影99爱 | 黄色影院av | 午夜精品小视频 | 国产一国产一级毛片视频 | 欧产日产国产精品v | 天天色综合6 | 黄色网络免费看 | 国产精品成人久久久久a级 欧美特黄一级高清免费的香蕉 | 久久视频精品 | 9191色| 在线a亚洲视频播放在线观看 | 蜜桃视频在线入口www | 午夜视频你懂的 | av视在线 | 亚洲一区二区三区四区精品 | 毛片中文字幕 | av成人在线免费观看 | 日本免费不卡一区二区 | 一级黄色免费大片 | 12av电影 | 亚洲一区二区在线免费 | 国产精品一区久久久久 | 一区二区免费 |