XHR 和 XSL - Promise Chaining 和 transformToFragment 为空

问题描述

我一直致力于将 ActiveX/MSXML/XSL 转换为基于 Promise 的 XHR/XML/XSL 链。我知道我必须处理 Promise 拒绝并通常简化所有冗余等......只是试图到达那里,然后我会回去完成所有这些。

基本上是

  1. 创建一个通用的 resultObj

  2. promise 链接两个 XHR 请求...job1 (XML) 和 job3 (XSL)

  3. 将每个 responseXML 分别作为 srcDoc 和 xslDoc 附加到 resultObj

  4. 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 (将#修改为@)