最近项目中出现上传文件返回的json数据会被提示下载,只有在ie10+中才会出现这个问题。前端使用jQuery的插件ajaxForm提交表单,后台返回的数据格式为json。代码如下:
后端Python:
代码如下:
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:
# 依据 ,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,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代码:
代码如下:
解决办法: 需要将后端返回的数据格式改成text/html格式的,如下:
代码如下:
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,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格式的”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。