这是部分代码:
function readXmlUsingXPath(i,guid, xpath) {
var xmlDoc = loadXML("gameFeed.aspx?guid=" + guid);
if (xmlDoc == null) { document.getElementById(guid).innerHTML = "UPDATING"; return }
else { };
i.innerHTML = xmlDoc.selectNodes(xpath)[0].text;
}
window.onload = function () {
for (var i = 0; i < document.getElementsByTagName('jackpot').length; i++) {
var guid = document.getElementsByTagName('jackpot')[i].getAttribute('data-g').split('|')[0];
var xpath = document.getElementsByTagName('jackpot')[i].getAttribute('data-g').split('|')[1];
readXmlUsingXPath(document.getElementsByTagName('jackpot')[i],guid, xpath);
}
}
基本上,我想要做的是将元素从onload函数传递给readXmlUsingXpath函数,所以我可以改变它。
但我得到一个未知的运行时错误...
如所问,一些示例html:
<li>
<a href="/gamepath/"><span>gameTitle</span>
<span><jackpot data-g="<%=game.Guid %>|<%=game.GamingProperties.JackpotFeedXpath %>">UPDATING . . .</jackpot></span>
</a>
</li>
答案 0 :(得分:1)
嗯,首先,是的 - 将getElementsByTagName()
和.getAttribute('data-g').split('|')
的结果缓存到变量中:
var myDataG = MyJackpotElement.getAttribute('data-g').split('|');
然后代替处理来自HTML源代码的XPath,因为无论如何都要将guid
传递给服务器端脚本,让服务器脚本处理服务器端的项目(使用XPath) - 所以它会从Guid :)加载的项目中获取xpath表达式
使服务器端脚本返回您要查找的值(gameFeed.aspx?guid=
),而不是您将在客户端进一步处理以查找值的XML。< / p>
答案 1 :(得分:0)
根据Denis的建议重构后,代码是否有效?
执行getElementsByTagName的方式的一个大问题,即使除了巨大的性能损失之外,如果集合因任何原因而发生更改,则长度可能不再正确,并且您可能只请求元素9 8存在。
此外,更改元素的innerHTML
可能会导致浏览器失效。
Side nit:我已将i
函数的readXmlUsingXPath
参数重命名为jackpot
,这似乎比i
更合适。
function readXmlUsingXPath(jackpot, guid, xpath) {
var xmlDoc = loadXML("gameFeed.aspx?guid=" + guid);
if (xmlDoc == null) {
document.getElementById(guid).innerHTML = "UPDATING";
return;
}
var firstNode = xmlDoc.selectNodes(xpath).item(0);
jackpot.innerHTML = firstNode.text;
}
window.onload = function () {
var jackpots = document.getElementsByTagName('jackpot');
for (var i = 0; i < jackpots.length; i++) {
var data = jackpots[i].getAttribute('data-g').split('|'),
guid = data[0],
xpath = data[1];
readXmlUsingXPath(jackpots[i], guid, xpath);
}
}
答案 2 :(得分:0)
现在它可以正常运作。
function loadXMLDoc(guid,xpath,i) {
var xmlhttp;
if (window.XMLHttpRequest) {xmlhttp = new XMLHttpRequest();}
else {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.async = true;
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
i.innerHTML = xmlhttp.responseXML.selectNodes(xpath)[0].text;
}
}
xmlhttp.open("GET", "gameFeed.aspx?guid=" + guid, true);
xmlhttp.send();
}
var tags = document.getElementsByTagName("pre");
for (var i = 0; i < tags.length; i++) {
var data = tags[i].getAttribute('data-g').split('|'), guid = data[0], xpath = data[1];
loadXMLDoc(guid,xpath,tags[i]);
}