报错原因:
ios setRequestHeader@[native code] setRequestHeader forEach dispatchXhrRequest Promise
js ios报错 type error
js iOS 允许http加载、ios端js网络请求失败、axios iOS请求失败
解决方法:
1.首先要允许iOS的壳子能加载http的。在info.plist里设置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
</plist>
这里要注意,多检查几遍,我当时看着是设置了,但是一直请求失败,最后发现不小心设置了两遍,有一遍是错误的。
1.2> 还有说要设置NSExceptionDomains 白名单,我试了有没有都行,可能你那必须要设置这个
2.以上这是iOS端要设置的。js端要注意的一点是请求头header里不能包含中文字符和空格等等。
我的就是困扰了一天多,安卓的请求OK,iOS端就是请求失败,提示type error。最后联合前端一块调试,深究type error到底是怎么引起的?最后打印出来错误信息“setRequestHeader@[native code] setRequestHeader forEach dispatchXhrRequest Promise”。经过调试发现是因为js端的设置header时,从iOS这获取了很多设备信息如app名字 app版本 等等,这些信息要设置到header请求头里,结果appName里包含中文字符引起的请求失败。
设置请求头(headers)的属性值时,头部跟结尾不允许出现空格
在前端页面发送request请求到后台时,请求头即header中放入了中文,所以就会出现编码格式问题。
要解决问题就要对中文字符进行编码,到后台里再进行解码接收处理。
2、编码解码:
以下为vue中对中文进行编码解码的方式:
// 编码 encodeURIComponent(str)
// 解码 decodeURIComponent(str)
后台进行接收:
//编码 java.net.URLEncoder.encode(token,"UTF-8")
//解码 java.net.URLDecoder.decode(token,"UTF-8")