欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

上傳文件返回的json數(shù)據(jù)會(huì)被提示下載問(wèn)題解決方案

 更新時(shí)間:2014年12月03日 09:25:46   投稿:hebedich  
這篇文章主要介紹了項(xiàng)目中python+js實(shí)現(xiàn)的上傳文件返回的json數(shù)據(jù)會(huì)被提示下載問(wèn)題解決方案,需要的朋友可以參考下

最近項(xiàng)目中出現(xiàn)上傳文件返回的json數(shù)據(jù)會(huì)被提示下載,只有在ie10+中才會(huì)出現(xiàn)這個(gè)問(wèn)題。前端使用jQuery的插件ajaxForm提交表單,后臺(tái)返回的數(shù)據(jù)格式為json。代碼如下:

 后端Python:

復(fù)制代碼 代碼如下:

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:
                # 依據(jù) http://evilcos.me/?p=425,jsonp添加/**/頭部會(huì)安全一些
                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代碼:

復(fù)制代碼 代碼如下:

$('#form').ajaxSubmit({
    url      : '/patch/install.json',
    type     : 'post',
    dataType : 'json',
    iframe   : true,
    success: function(res) {
        // code
    }
});

解決辦法:
  需要將后端返回的數(shù)據(jù)格式改成text/html格式的,如下:

復(fù)制代碼 代碼如下:

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,如果項(xiàng)目中遇到同樣問(wèn)題,改成對(duì)應(yīng)語(yǔ)言

總結(jié),其實(shí)解決這個(gè)問(wèn)題,簡(jiǎn)單的說(shuō)就一句話“將后端返回的數(shù)據(jù)格式改成text/html格式的”

相關(guān)文章

  • uni-app操作數(shù)據(jù)庫(kù)的三種方法總結(jié)

    uni-app操作數(shù)據(jù)庫(kù)的三種方法總結(jié)

    數(shù)據(jù)庫(kù)操作的,可以采用多方案,下面這篇文章主要給大家介紹了關(guān)于uni-app操作數(shù)據(jù)庫(kù)的三種方法,文中通過(guò)實(shí)例代碼和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • 淺談一個(gè)webpack構(gòu)建速度優(yōu)化誤區(qū)

    淺談一個(gè)webpack構(gòu)建速度優(yōu)化誤區(qū)

    這篇文章主要介紹了淺談一個(gè)webpack構(gòu)建速度優(yōu)化誤區(qū),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 原生javascript實(shí)現(xiàn)分享到朋友圈功能 支持ios和android

    原生javascript實(shí)現(xiàn)分享到朋友圈功能 支持ios和android

    本文主要介紹網(wǎng)上一個(gè)牛人寫的js可以實(shí)現(xiàn)在UC瀏覽器和QQ瀏覽器中調(diào)用瀏覽器內(nèi)置的分享組件進(jìn)行分享。
    2016-05-05
  • javascript事件冒泡和事件捕獲詳解

    javascript事件冒泡和事件捕獲詳解

    最近在學(xué)習(xí)javascript中遇到了一些困難,比如冒泡和捕獲,很多次被提到,但又不知究竟應(yīng)用在何處。找到了一些好文章解惑,在這里分享給大家。
    2015-05-05
  • 基于es6三點(diǎn)運(yùn)算符的使用方法(實(shí)例講解)

    基于es6三點(diǎn)運(yùn)算符的使用方法(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇基于三點(diǎn)運(yùn)算符的使用方法(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • JavaScript手寫LRU算法的示例代碼

    JavaScript手寫LRU算法的示例代碼

    LRU是Least?Recently?Used的縮寫,即最近最少使用。作為一種經(jīng)典的緩存策略,它的基本思想是長(zhǎng)期不被使用的數(shù)據(jù),在未來(lái)被用到的幾率也不大,所以當(dāng)新的數(shù)據(jù)進(jìn)來(lái)時(shí)我們可以優(yōu)先把這些數(shù)據(jù)替換掉。本文用JavaScript實(shí)現(xiàn)這一算法,需要的可以參考一下
    2022-09-09
  • js中日期的加減法

    js中日期的加減法

    JavaScript實(shí)現(xiàn)日期加減計(jì)算功能代碼實(shí)例,因?yàn)樵趈s中沒(méi)有類似C#中的AddDays方法,所以要想實(shí)現(xiàn)日期加減的話,就需要自己寫函數(shù)來(lái)實(shí)現(xiàn)。
    2015-05-05
  • Js過(guò)濾空格的實(shí)現(xiàn)代碼

    Js過(guò)濾空格的實(shí)現(xiàn)代碼

    Js空格過(guò)濾代碼,這個(gè)實(shí)用性很強(qiáng),可以省去用動(dòng)態(tài)語(yǔ)言過(guò)濾字符的麻煩,減輕服務(wù)器壓力,而且JS執(zhí)行速度較快
    2013-03-03
  • 詳解JavaScript Promise和Async/Await

    詳解JavaScript Promise和Async/Await

    這篇文章主要介紹了JavaScript Promise和Async/Await,對(duì)異步編程感興趣的同學(xué),可以參考下
    2021-04-04
  • 微信小程序自定義toast的實(shí)現(xiàn)代碼

    微信小程序自定義toast的實(shí)現(xiàn)代碼

    這篇文章主要介紹了微信小程序自定義toast的實(shí)現(xiàn)代碼,本文以toast為例通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11

最新評(píng)論