Maison  >  Article  >  interface Web  >  Comment résoudre l'exception de traitement de wx.request pour JSON contenant \u2028 dans l'applet WeChat

Comment résoudre l'exception de traitement de wx.request pour JSON contenant \u2028 dans l'applet WeChat

不言
不言original
2018-07-13 14:52:172759parcourir

Cet article présente principalement comment résoudre l'exception de traitement wx.request pour JSON contenant u2028 dans l'applet WeChat. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Description du problème

Récemment, pendant le processus de développement du mini-programme, j'ai rencontré un problème magique.

L'API wx.request utilisée par l'applet pour lancer des requêtes réseau analysera le corps de la réponse au format JSON par défaut et renverra un objet JS.

wx.request({
    url: 'test.php', //仅为示例,并非真实的接口地址
    data: {
        x: '',
        y: ''
    },
    header: {
        'content-type': 'application/json' // 默认值
    },
    success: function(res) {
        console.log(res.data)
    }
})

est généralement de type Objet. res.data

Cependant, si les données JSON du corps de la réponse contiennent

caractères, l'interprétation échouera et la sortie \u2028 est le type de chaîne du corps de la réponse. res.data

Échantillon

Échantillon de test :

{“test”:”这里有一个特殊字符:
  "}

Code du test :

wx.request({
    ...
    success: (res) => {
        console.log('APIFactory:run', '调试', { res });
    },
});
Résultat :

  1. Dans les outils de développement, il peut être analysé normalement


    Comment résoudre lexception de traitement de wx.request pour JSON contenant \u2028 dans lapplet WeChat

  2. Sur les appareils réels (iOS et Android), il ne parvient pas à être analysé


    Comment résoudre lexception de traitement de wx.request pour JSON contenant \u2028 dans lapplet WeChat

u2028

Le caractère spécial est

, qui est analysé comme un séparateur de ligne. u2028 Ce caractère est compatible dans les chaînes JSON et peut être analysé normalement par
. JSON.parseMais s'il y a cette chaîne dans le code JS, cela provoquera une erreur de fonctionnement.

Pourquoi les appareils réels et les outils de développement fonctionnent-ils de manière incohérente ?

L'applet WeChat s'exécute sur trois terminaux : iOS, Android et les outils de développement pour le débogage.

Les environnements d'exécution des scripts JS des trois terminaux sont différents :

  • Sur iOS, le code javascript du mini programme s'exécute en JavaScriptCore.

  • Sur Android, le code javascript du mini programme est analysé via X5 JSCore.

  • Sur l'outil de développement, le code javascript du mini programme s'exécute en nwjs.

La couche logique et la couche de visualisation du mini-programme appellent l'API native via "WeixinJsBridge".

Comment résoudre lexception de traitement de wx.request pour JSON contenant \u2028 dans lapplet WeChat

Le problème est donc que,

Concernant le traitement des données du corps de la réponse, qu'il soit traité en JS Engine ou Native, WeChat ne divulgue pas le code source de le mini programme La situation est inconnue. Le traitement de wx.request

équivaut pour nous à une boîte noire, et le type de données de wx.request peut avoir plusieurs valeurs. Si nous voulons offrir une meilleure robustesse en entreprise, nous avons également besoin d'une compatibilité avec le jugement. et code tolérant aux pannes lorsque res.data est de type res.data. Object/String

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !


Recommandations associées :

Explication des astuces pour les tableaux Array en JavaScript

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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