Maison  >  Article  >  interface Web  >  Les données json renvoyées par le téléchargement du fichier seront invitées à télécharger les compétences solution_javascript du problème

Les données json renvoyées par le téléchargement du fichier seront invitées à télécharger les compétences solution_javascript du problème

WBOY
WBOYoriginal
2016-05-16 16:29:281410parcourir

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 :

Python back-end :

Copier le code 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'}

Code js frontal :

Copier le code Le code est le suivant :

$('#form').ajaxSubmit({
URL : '/patch/install.json',
Tapez : 'post',
Type de données : 'json',
iframe : vrai,
Succès : fonction(res) {
             // code
>
});

Solution :
Il est nécessaire de changer le format des données renvoyées par le backend au format texte/html, comme suit :

Copier le code Le code est le suivant :

def plain(func):
"""envelopper le texte/réponse HTML"""
@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'})
       autre :
              retour réponse
Retour _inner
@mod.route('/patch/install.json', méthodes=['POST'])
@plaine
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"

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn