-
Creator 版本: 3.6.0
-
目标平台: Android studio 自带的模拟器 api level:30 abi:x86
-
重现方式 创建hellow world模板工程 分别使用fetch 和 XMLHttpRequest请求同一个接口
-
首个报错: jsb_xmlhttprequest.cpp 里面SE_PRECONDITION2(false, false, “Invalid response type”);
-
编辑器操作系统: windows10
-
重现概率: 100%
-
分析: web-adapter.js里面以下代码设置了fetch为blob,但是jsb_xmlhttprequest.cpp里面没有该类型的解析。
web-adapter.js
if ('responseType' in xhr && support.blob) {
xhr.responseType = 'blob'
}
jsb_xmlhttprequest.cpp
static bool XMLHttpRequest_getResponse(se::State &s) { //NOLINT(readability-identifier-naming, google-runtime-references)
auto *xhr = static_cast<XMLHttpRequest *>(s.nativeThisObject());
if (xhr->getResponseType() == XMLHttpRequest::ResponseType::STRING) {
s.rval().setString(xhr->getResponseText());
} else {
if (xhr->getReadyState() != XMLHttpRequest::ReadyState::DONE) {
s.rval().setNull();
} else {
if (xhr->getResponseType() == XMLHttpRequest::ResponseType::JSON) {
const ccstd::string &jsonText = xhr->getResponseText();
se::HandleObject seObj(se::Object::createJSONObject(jsonText));
if (!seObj.isEmpty()) {
s.rval().setObject(seObj);
} else {
s.rval().setNull();
}
} else if (xhr->getResponseType() == XMLHttpRequest::ResponseType::ARRAY_BUFFER) {
const Data &data = xhr->getResponseData();
se::HandleObject seObj(se::Object::createArrayBufferObject(data.getBytes(), data.getSize()));
if (!seObj.isEmpty()) {
s.rval().setObject(seObj);
} else {
s.rval().setNull();
}
} else {
SE_PRECONDITION2(false, false, "Invalid response type");
}
}
}
return true;
}
SE_BIND_PROP_GET(XMLHttpRequest_getResponse)