이 글은 주로 WeChat 애플릿에 u2028이 포함된 JSON에 대한 wx.request 처리 예외를 해결하는 방법을 소개합니다. 이제 특정 참조 값이 있으므로 필요한 친구가 참조할 수 있도록 공유합니다.
미니 프로그램을 개발하는 과정에서 마법같은 문제에 부딪혔습니다.
애플릿이 네트워크 요청을 시작하기 위해 사용하는 API wx.request는 기본적으로 응답 본문을 JSON 형식으로 구문 분석하고 JS 개체를 반환합니다.
wx.request({ url: 'test.php', //仅为示例,并非真实的接口地址 data: { x: '', y: '' }, header: { 'content-type': 'application/json' // 默认值 }, success: function(res) { console.log(res.data) } })
여기서 res.data
는 일반적으로 Object 유형입니다. res.data
一般会是 Object 类型。
但是,响应体的 JSON 数据包含了 \u2028
的字符,就会解释失败,输出的 res.data
是响应体的字符串类型。
测试样本:{“test”:”这里有一个特殊字符:
"}
测试代码:
wx.request({ ... success: (res) => { console.log('APIFactory:run', '调试', { res }); }, });
结果:
在 开发者工具 中,能正常解析
在 真机(iOS 和 Android),都解析失败
该特殊字符就是 u2028
,解析为行分隔符。
该字符,在 JSON 字符串中,是被兼容的,是能被 JSON.parse
正常解析的。
但是 JS 代码中有这个字符串,就会导致运行出错。
微信小程序运行在三端:iOS、Android 和 用于调试的开发者工具。
三端的JS脚本执行环境是各不相同的:
在 iOS 上,小程序的 javascript 代码是运行在 JavaScriptCore 中。
在 Android 上,小程序的 javascript 代码是通过 X5 JSCore来解析。
在 开发工具上, 小程序的 javascript 代码是运行在 nwjs 中。
而小程序的逻辑层和视图层,都是通过「WeixinJsBridge」来调用 Native API 的。
所以问题出在,wx.request
对于响应体的数据处理,到底是在 JS Engine 处理的,还是 Native 处理的,在微信不公开小程序源码的情况下,不得而知。
wx.request
的处理对于我们来说,相当于黑盒,并且对于 res.data
的数据类型可能值是多种的,如果想在业务上提供更好的健壮性,还需要兼容 res.data
为 Object/String
\u2028
문자가 포함되어 있으면 해석이 실패하고 출력 res.data
는 응답의 문자열 유형입니다. 몸.
{"test":"여기에 특수 문자가 있습니다: "}
테스트 코드:
rrreeeu2028
이며 줄 구분 기호로 구문 분석됩니다. 🎜이 문자는 JSON 문자열과 호환되며 JSON.parse
로 정상적으로 구문 분석할 수 있습니다. 🎜하지만 JS 코드에 이 문자열이 있으면 실행 오류가 발생합니다. 🎜🎜실제 장치와 개발자 도구의 성능이 일치하지 않는 이유는 무엇입니까?🎜🎜WeChat 애플릿은 iOS, Android 및 디버깅용 개발자 도구의 세 가지 터미널에서 실행됩니다. 🎜세 터미널의 JS 스크립트 실행 환경은 다릅니다: 🎜wx.request
가 응답 본문의 데이터를 JS Engine에서 처리하는지 Native에서 처리하는지에 있습니다. WeChat은 미니 프로그램의 소스 코드를 공개하지 않습니다. ,unknown . 🎜🎜wx.request
처리는 우리에게 블랙박스와 동일하며, res.data
의 데이터 유형은 비즈니스에 사용하려는 경우 여러 값을 가질 수 있습니다. 더 나은 견고성을 제공하려면 res.data
가 Object/String
유형일 때 판단 및 내결함성 코드와도 호환되어야 합니다. 🎜🎜위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되었으면 좋겠습니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 주목해주세요! 🎜🎜🎜관련 권장 사항: 🎜🎜🎜JavaScript의 배열 배열에 대한 팁 설명🎜🎜🎜🎜🎜Angular-UI 부트스트랩 구성 요소를 사용하여 경고를 구현하는 방법🎜🎜🎜위 내용은 WeChat 애플릿에 \u2028이 포함된 JSON에 대한 wx.request 처리 예외를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!