最近开发快应用app时遇到一个奇怪问题:fetch.fecth在开发工具QuickAppIDE “本地预览”时,返回的data数据是正常的;而远程真机就无法直接获取,data内容不是json数据,
而是“internal://cache/action-xx.do”的字符串,除了data内容是这个外,其他数据都正常,responsecode也是200,contentlenth也是正常的。
经反复思考尝试,发现“internal://cache/action-xx.do”是一个文件路径地址,即数据已经获取到本地了,但是被存在一个cache文件里。Fetch接口返回的cache文件地址,可能是因为数据量太大了,都读到返回数据里,会占用很大内存;而被保存在cache文件里,用户需要时再读取会比较好。
于是在代码里import @system.file, 通过file.readText 接口读取到了返回数据,跟pc上的本地预览里返回的数据一模一样。
下面是相应代码:
import router from '@system.router'
import file from '@system.file'
getSubMenu(reqdata) {
const that = this; // 保存当前this
fetch.fetch({
url: 'http://xxxxx/action.do',
method: 'POST',
success: function (res) {
if(res.data.search("internal://cache") != -1) {
//如果是保存在文件里,需要从文件里读取数据
that.getDataInfo(res.data);
} else {
var resdata = JSON.parse(res.data);
//本机预览在这里处理数据
}
}
},
fail: function (err, code) {
console.log(that.tag +"handling fail code = " + code);
}
})
},
getDataInfo(filepath) {
const that = this; // 保存当前this
file.readText({
uri: filepath,
success: function (data) {
console.log(that.tag + data.text);
//从文件里获取到的数据和QuickAppIDE 本机预览里的数据一样
},
fail: function (data, code) {
console.log(`handling fail, code = ${code}`)
}
})
}