手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >上传文件返回的json数据会被提示下载问题解决方案
上传文件返回的json数据会被提示下载问题解决方案
摘要:最近项目中出现上传文件返回的json数据会被提示下载,只有在ie10+中才会出现这个问题。前端使用jQuery的插件ajaxForm提交表单...

最近项目中出现上传文件返回的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格式的”

【上传文件返回的json数据会被提示下载问题解决方案】相关文章:

根据内容自动调整弹出窗口大小的JS解决方案

可拖动窗口,附带鼠标控制渐变透明,开启关闭功能

js验证上传图片的方法

png在IE6 下无法透明的解决方法汇总

无刷新上传文件并返回自定义值

使用Node.js处理前端代码文件的编码问题

js控制excel打印完美解决方案

iscroll.js的上拉下拉刷新时无法回弹的解决方法

JS排序方法(sort,bubble,select,insert)代码汇总

JavaScript实现带标题的图片轮播特效

精品推荐
分类导航