Dans les projets récents, les données json renvoyées par le téléchargement de fichiers seront invitées à être téléchargées. Ce problème ne se produit que dans IE10. Le front-end utilise le plug-in jQuery ajaxForm pour soumettre le formulaire, et le format de données renvoyé par l'arrière-plan est json. Le code est le suivant :
def jsonp(func):
"""Encapsule la sortie JSONifiée pour les requêtes JSONP."""
@wraps(func)
def décoré_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)
essayez :
temp_content = json.dumps(temp_content, indent=4)
sauf UnicodeDecodeError :
essayez :
temp_content = ujson.dumps(temp_content)
sauf StandardError comme e:
Logger.exception(e)
temp_content = json.dumps({'success' : False, 'code' : 500, 'info' : 'INVALID_CONTENT'})
temp_content = cgi.escape(temp_content)
si rappel :
# Basé sur
http://evilcos.me/?p=425, jsonp ajoute /**/La tête sera plus en sécurité
contenu = '/**/' str(callback) '(' temp_content ')'
mimetype = 'application/javascript'
en-têtes = {'charset':'utf-8'}
return current_app.response_class(content, mimetype=mimetype, headers=headers)
autre :
mimetype = 'application/json'
en-têtes = {'charset':'utf-8'}
contenu = 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
autre :
return temp_content
Retour décoré_function
@mod.route('/patch/install.json', méthodes=['POST'])
@jsonp
def patch_install() :
Renvoie {'data' : 'data'}
Remarque : le backend de cet exemple utilise Python. Si vous rencontrez le même problème dans le projet, remplacez-le par le langage correspondant
Pour résumer, en fait, pour résoudre ce problème, mettez-le simplement en une phrase : "Changez le format des données renvoyées par le backend au format texte/html"