如何解决XHR 和 XSL - Promise Chaining 和 transformToFragment 为空
我一直致力于将 ActiveX/MSXML/XSL 转换为基于 Promise 的 XHR/XML/XSL 链。我知道我必须处理 Promise 拒绝并通常简化所有冗余等......只是试图到达那里,然后我会回去完成所有这些。
基本上是
-
创建一个通用的 resultObj
-
promise 链接两个 XHR 请求...job1 (XML) 和 job3 (XSL)
-
将每个 responseXML 分别作为 srcDoc 和 xslDoc 附加到 resultObj
-
XML/XSL 转换内容 (job4)。
然而,虽然似乎正在返回 XML 和 XSL(每个 XHR 调用中的 responseText 警报显示 XML 和 XSL 内容)...我在 tranformToFragment 处收到空错误。有人有想法吗?非常感谢。
var resultObj=new Object();
function runPromise(url,postData)
{
var count=0;
var xmldoc;
var promise = job1(url);
promise
.then(function(data1) {
//RETURNED XML
resultObj.srcDoc = data1;
return job3(stylesheetURL);
},function error(data1) {
alert(data1 + 'error 1');
})
.then(function(data3) {
//RETURNED XSL
resultObj.xslDoc = data3;
return job4();
},function error(data3) {
alert(data3 + 'error 3');
})
.then(function(data4) {
},function error(data3) {
alert(data4 + 'error 4');
})
;
}
function job1(url) {
xmldoc = new XMLHttpRequest();
return new Promise(function(resolve,reject) {
setTimeout(function() {
xmldoc.resolveExternals = false;
xmldoc.validateOnParse = false;
xmldoc.preserveWhiteSpace = false;
xmldoc.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
alert(xmldoc.responseText);
resolve(xmldoc.responseXML);
} else {
}
};
xmldoc.open("GET",url,true);
xmldoc.send();
},200);
});
}
function job3(url) {
return new Promise(function(resolve,reject) {
xmldoc = new XMLHttpRequest();
setTimeout(function() {
xmldoc.resolveExternals = false;
xmldoc.validateOnParse = false;
xmldoc.preserveWhiteSpace = false;
xmldoc.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
alert(xmldoc.responseText);
resolve(xmldoc.responseXML);
} else {
}
};
xmldoc.open("GET",true);
xmldoc.send();
},200);
});
}
function job4() {
return new Promise(function(resolve,reject) {
setTimeout(function() {
xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(resultObj.xslDoc);
var mydocument=document.implementation.createDocument("","",null);
resultObj.transformedDoc=xsltProcessor.transformToFragment
(resultObj.srcDoc,mydocument);
alert(resultObj.transformedDoc);
alert("resultObj.transformedDoc above is a null...why2??");
//Go to the first page
resultObj.currentPageNumber = 1;
//display the table
resultObj.numOfRow = resultObj.transformedDoc.evaluate
("/table//tbody/tr",resultObj.transformedDoc,null,XPathResult.
ORDERED_NODE_SNAPSHOT_TYPE,null).snapshotLength;
displayResultTable(resultObj);
resolve("done for Now");
},200);
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。