Heim  >  Artikel  >  Web-Frontend  >  So lösen Sie die Verarbeitungsausnahme von wx.request für JSON, das \u2028 im WeChat-Applet enthält

So lösen Sie die Verarbeitungsausnahme von wx.request für JSON, das \u2028 im WeChat-Applet enthält

不言
不言Original
2018-07-13 14:52:172759Durchsuche

In diesem Artikel wird hauptsächlich beschrieben, wie die wx.request-Verarbeitungsausnahme für JSON im WeChat-Applet behoben wird. Jetzt kann ich sie mit Ihnen teilen.

Problembeschreibung

Kürzlich bin ich während des Entwicklungsprozesses des Miniprogramms auf ein magisches Problem gestoßen.

Die API wx.request, die vom Applet zum Initiieren von Netzwerkanforderungen verwendet wird, analysiert den Antworttext standardmäßig im JSON-Format und gibt ein JS-Objekt zurück.

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

wobei res.data normalerweise vom Typ Objekt ist.

Wenn die JSON-Daten des Antworttexts jedoch \u2028 Zeichen enthalten, schlägt die Interpretation fehl und die Ausgabe res.data ist der Zeichenfolgentyp des Antworttexts.

Beispiel

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

Testcode:

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

Ergebnis:

  1. in In den Entwicklertools kann
    So lösen Sie die Verarbeitungsausnahme von wx.request für JSON, das \u2028 im WeChat-Applet enthält

  2. normal analysiert werden. Auf echten Geräten (iOS und Android) schlägt
    So lösen Sie die Verarbeitungsausnahme von wx.request für JSON, das \u2028 im WeChat-Applet enthält
    fehl zu analysieren.

u2028

Das Sonderzeichen ist u2028, das als Zeilentrennzeichen analysiert wird.
Dieses Zeichen ist mit JSON-Strings kompatibel und kann normal von JSON.parse geparst werden.
Aber wenn diese Zeichenfolge im JS-Code vorhanden ist, führt dies zu einem Betriebsfehler.

Warum funktionieren echte Geräte und Entwicklertools inkonsistent?

Das WeChat-Applet läuft auf drei Terminals: iOS, Android und Entwicklertools zum Debuggen.
Die JS-Skriptausführungsumgebungen der drei Terminals sind unterschiedlich:

  • Unter iOS läuft der Javascript-Code des Miniprogramms in JavaScriptCore.

  • Auf Android wird der Javascript-Code des Miniprogramms über X5 JSCore analysiert.

  • Auf dem Entwicklungstool läuft der Javascript-Code des Miniprogramms in nwjs.

Die Logikschicht und die Ansichtsschicht des Miniprogramms rufen die native API über „WeixinJsBridge“ auf.

So lösen Sie die Verarbeitungsausnahme von wx.request für JSON, das \u2028 im WeChat-Applet enthält

Das Problem ist also: wx.request In Bezug auf die Datenverarbeitung des Antworttexts, unabhängig davon, ob er in JS Engine oder Native verarbeitet wird, gibt WeChat den Quellcode nicht bekannt das Miniprogramm Die Situation ist unbekannt. Die Verarbeitung von

wx.request entspricht für uns einer Blackbox, und der Datentyp von res.data kann mehrere Werte haben. Wenn wir eine bessere Robustheit im Geschäft gewährleisten möchten, benötigen wir auch eine kompatible Beurteilung und fehlertoleranter Code, wenn res.data vom Typ Object/String ist.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Erläuterung von Tipps für Array-Arrays in JavaScript

Das obige ist der detaillierte Inhalt vonSo lösen Sie die Verarbeitungsausnahme von wx.request für JSON, das \u2028 im WeChat-Applet enthält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn