上传文件返回的json数据会被提示下载问题解决方案
2014-12-03 00:00
876 查看
最近项目中出现上传文件返回的json数据会被提示下载,只有在ie10+中才会出现这个问题。前端使用jQuery的插件ajaxForm提交表单,后台返回的数据格式为json。代码如下:
后端Python:
前端js代码:
解决办法:
需要将后端返回的数据格式改成text/html格式的,如下:
注意:此例后端是用Python,如果项目中遇到同样问题,改成对应语言
总结,其实解决这个问题,简单的说就一句话“将后端返回的数据格式改成text/html格式的”
后端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格式的”
相关文章推荐
- 上传文件返回的json数据会被提示下载问题解决方案
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 解决IE浏览器下上传文件返回Json数据提示下载的问题。
- Jquery form.js文件上传返回JSON数据,在IE下提示下载文件的解决办法,并对返回数据进行正确的解析
- 解决IE下返回json数据提示文件保存到问题
- 解决在IE中返回JSON格式的数据时提示下载的问题
- ie8下使用jquery-file-upload上传文件后返回json格式数据提示下载
- servlet返回application/json数据类型在ie浏览器中提示下载文件问题
- 处理文件上传后返回json数据在IE出现文件下载问题
- 解决IE下返回json数据提示文件保存到问题
- 解决springmvc返回json数据IE出现文件下载和json数据中文乱码问题
- Spring MVC框架文件上传返回JSON在IE浏览器中提示下载解决方法
- form+iframe上传文件返回json在IE下提示下载的问题(源于ueditor的错误)(从ITEYE搬家过来的)
- 下载文件名字乱码问题,json_encode解决Ajax 返回字符串数据不显示问题
- .NET easyui form提交后,返回json数据在IE下弹出下载的问题解决方法
- struts2+extjs文件上传,提示下载问题解决
- 前端文件上传,struts2后台返回json数据,在IE为什么会以文件下载的形式打开。
- Jquery 返回json数据在IE浏览器中提示下载的问题
- extjs3.4+struts2上传文件却弹出下载框,下载的文件内容为json 返回的值的问题