最近项目中出现上传文件返回的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格式的”
本文向大家介绍ajaxFileUpload插件,C#返回Json数据报错问题的解决方案,包括了ajaxFileUpload插件,C#返回Json数据报错问题的解决方案的使用技巧和注意事项,需要的朋友参考一下 报错信息一:jQuery.handleError is not a function 上传图片的时候,通过F12,查看到这个错误。 解决方案: jquery版本问题,handlerErro
本文向大家介绍解决layui上传文件提示上传异常,实际文件已经上传成功的问题,包括了解决layui上传文件提示上传异常,实际文件已经上传成功的问题的使用技巧和注意事项,需要的朋友参考一下 layui上传文件提示上传异常,实际文件已经上传成功 原因:上传回调的方法接收的参数应该是json格式的,之前返回的是String,所以一直走异常的方法 以上这篇解决layui上传文件提示上传异常,实际文件已经上
本文向大家介绍Android Retrofit文件下载进度显示问题的解决方法,包括了Android Retrofit文件下载进度显示问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 综述 在Retrofit2.0使用详解这篇文章中详细介绍了retrofit的用法。并且在retrofit中我们可以通过ResponseBody进行对文件的下载。但是在retrofit中并没有为我们提供显示下载
本文向大家介绍asp.net上传文件到数据库的解决方案,包括了asp.net上传文件到数据库的解决方案的使用技巧和注意事项,需要的朋友参考一下 现在,我们来看存放文件的数据库表结构,这里,我们给出建立表的标准SQL语句: 以上的语句中,我们看到数据表tblBooksUpload包含五个字段: ·字段DocID是表的关键字段,数据记录编号; ·字段DocTitle是用来简单说明上传文件的,如果上传文
问题内容: 我目前正在尝试从URL下载,解析和打印JSON。到目前为止,我到了这一点: 1)一个类(JSONImport.swift),它处理我的导入: 我的 问题 是, 保持为空。当我调试时,连接将以给定的url作为参数成功启动。但是我的jsonData变量没有被打印。相反,catch块引发错误,指出我的变量中没有数据: 有人可以帮我吗?我想念什么? 提前非常感谢大家! [从NSURL Conn
本文向大家介绍解决Django响应JsonResponse返回json格式数据报错问题,包括了解决Django响应JsonResponse返回json格式数据报错问题的使用技巧和注意事项,需要的朋友参考一下 代码 return JsonResponse({"name": "tom"}) 报错: TYPEERROR: In order to allow non-dict objects to be