今天遇到个问题,threejs 的 FbxLoader 加载模型时,如果开启了 mock,则无法加载出模型,那就来看看到底是什么鬼
mockjs 原理:
在引入了 Mock 之后,mock.js 内部会创建一个 MockXMLHttpRequest 来替代原生的 XMLHttpRequest,如果有原生的 XHR 请求来,则拦截,替换成 MockXMLHttpRequest 对象,然后再匹配对应的 url,如果没有,就发送网络请求。
FbxLoader 是继承自 Three.js 的 FileLoader 对象,调用 load 方法时,会先判断传入的 url 是否是 Base64 格式的 DataURI, 如果是,则进行解析并返回,如果不是,就创建 XHR 请求。
到底是哪里出问题了呢?
调试到 FbxLoader 里,发现在 load 成功后,得到返回值是 buffer,需要进行解析,responseType 需要是 ’arrayBuffer‘ 类型!问题来了,在 mockjs 的 MockXMLHTTP 中没有把 responseType 进行设置,而是设置成了空值,所以,无法解析出 buffer 对象。