Javascript 修复JS XML加载以不使用async=false-如何?
我最初打算使用jQuery进行XML解析(单节点),但运气不好,所以最终使用了纯Javascript。该代码位于该线程中: 现在我可以看到,我使用XMLhttpRequest函数的方式已被弃用,将来可能会被删除,这将破坏我主页上的很多内容 Google inspector也有报道 workers外部的同步XMLHttpRequest正在从web平台中删除,因为它对最终用户的体验有不利影响 我想重新打开原来的问题,并获得帮助,重写下面的内容以加载我的XML,而无需在代码中使用async=falseJavascript 修复JS XML加载以不使用async=false-如何?,javascript,jquery,xml,Javascript,Jquery,Xml,我最初打算使用jQuery进行XML解析(单节点),但运气不好,所以最终使用了纯Javascript。该代码位于该线程中: 现在我可以看到,我使用XMLhttpRequest函数的方式已被弃用,将来可能会被删除,这将破坏我主页上的很多内容 Google inspector也有报道 workers外部的同步XMLHttpRequest正在从web平台中删除,因为它对最终用户的体验有不利影响 我想重新打开原来的问题,并获得帮助,重写下面的内容以加载我的XML,而无需在代码中使用async=false
xhttp.open("GET",filename,false);
在我的HMTL代码中,代码大约在9/10以下被调用,但是简单地将“false”更改为“true”是不好的,因为根本没有加载任何内容(我猜代码在有机会插入XML数据之前会继续运行?)。由于我在JS方面的能力较弱,我不得不在谷歌上找到一些指向以下方面的答案:
如何更改代码以避免使用“false”语句
XML看起来像:
<scoreresults>
<topscorePicture>100</topscorePicture>
<topscoreFeature>100</topscoreFeature>
<topscoreUI>100</topscoreUI>
<item>
<title>
<![CDATA[ Test sample 1 ]]>
</title>
<link> Somelink </link>
<guid isPermaLink="true"> Somelink </guid>
<scorePicture>82</scorePicture>
<scoreFeature>90</scoreFeature>
<scoreUI>85</scoreUI>
<measurePowerOTB>180</measurePowerOTB>
<measurePowerCAL>160</measurePowerCAL>
<measurePowerSTANDBY>0.2</measurePowerSTANDBY>
<measureContrastOTB>2000</measureContrastOTB>
<measureContrastCAL>2200</measureContrastCAL>
<measureBrightnessOTB>210</measureBrightnessOTB>
<measureBrightnessCAL>130</measureBrightnessCAL>
</item>
</scoreresults>
100
100
100
Somelink
Somelink
82
90
85
180
160
0.2
2000
2200
210
130
脚本内容如下:
function loadXMLDoc(filename)
{
if (window.XMLHttpRequest)
{
xhttp=new XMLHttpRequest();
}
else // code for IE5 and IE6
{
xhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xhttp.open("GET",filename,false);
xhttp.send();
return xhttp.responseXML;
}
function showTVscore(testNo) {
//Load the XML
xmlDoc = loadXMLDoc("/testscores.xml");
//Extract the highest score for picture
tsp = xmlDoc.getElementsByTagName("topscorePicture")[0];
topspvalue = tsp.childNodes[0];
//Extract highest score for features
tsf = xmlDoc.getElementsByTagName("topscoreFeature")[0];
topsfvalue = tsf.childNodes[0];
//Extract highest score for UI
tsui = xmlDoc.getElementsByTagName("topscoreUI")[0];
topsuivalue = tsui.childNodes[0];
//Extract picture score for the specific test no.
sp = xmlDoc.getElementsByTagName("scorePicture")[testNo];
spvalue = sp.childNodes[0];
//Extract Feature score for the specific test no.
sf = xmlDoc.getElementsByTagName("scoreFeature")[testNo];
sfvalue = sf.childNodes[0];
//Extract UI score for the specific test no.
sui = xmlDoc.getElementsByTagName("scoreUI")[testNo];
suivalue = sui.childNodes[0];
//Calculate current scores
scorePicture = Math.round(Number(spvalue.nodeValue) / Number(topspvalue.nodeValue) * 100);
scoreFeature = Math.round(Number(sfvalue.nodeValue) / Number(topsfvalue.nodeValue) * 100);
scoreUI = Math.round(Number(suivalue.nodeValue) / Number(topsuivalue.nodeValue) * 100);
scoreTotal = Math.round(0.5 * scorePicture + 0.25 * scoreFeature + 0.25 * scoreUI);
//Set color of Picture scorebar
switch (Math.round(scorePicture / 10)) {
case 1:
pictureColor = "#934F00";
break;
case 2:
pictureColor = "#C36900";
break;
case 3:
pictureColor = "#F28200";
break;
case 4:
pictureColor = "C38D00";
break;
case 5:
pictureColor = "#F2AF00";
break;
case 6:
pictureColor = "#07ABFB";
break;
case 7:
pictureColor = "#008ED3";
break;
case 8:
pictureColor = "#006699";
break;
case 9:
pictureColor = "#00537B";
break;
case 10:
pictureColor = "#003F5D";
break;
};
//Set color of Feature scorebar
switch (Math.round(scoreFeature / 10)) {
case 1:
featureColor = "#934F00";
break;
case 2:
featureColor = "#C36900";
break;
case 3:
featureColor = "#F28200";
break;
case 4:
featureColor = "C38D00";
break;
case 5:
featureColor = "#F2AF00";
break;
case 6:
featureColor = "#07ABFB";
break;
case 7:
featureColor = "#008ED3";
break;
case 8:
featureColor = "#006699";
break;
case 9:
featureColor = "#00537B";
break;
case 10:
featureColor = "#003F5D";
break;
};
//Set color of UI scorebar
switch (Math.round(scoreUI / 10)) {
case 1:
uiColor = "#934F00";
break;
case 2:
uiColor = "#C36900";
break;
case 3:
uiColor = "#F28200";
break;
case 4:
uiColor = "C38D00";
break;
case 5:
uiColor = "#F2AF00";
break;
case 6:
uiColor = "#07ABFB";
break;
case 7:
uiColor = "#008ED3";
break;
case 8:
uiColor = "#006699";
break;
case 9:
uiColor = "#00537B";
break;
case 10:
uiColor = "#003F5D";
break;
};
//Set color of total scorebar
switch (Math.round(scoreTotal / 10)) {
case 1:
totalColor = "#934F00";
break;
case 2:
totalColor = "#C36900";
break;
case 3:
totalColor = "#F28200";
break;
case 4:
totalColor = "C38D00";
break;
case 5:
totalColor = "#F2AF00";
break;
case 6:
totalColor = "#07ABFB";
break;
case 7:
totalColor = "#008ED3";
break;
case 8:
totalColor = "#006699";
break;
case 9:
totalColor = "#00537B";
break;
case 10:
totalColor = "#003F5D";
break;
};
//Construct HTML
HTMLchunkStart = "<div style=\"float: Right; text-align: right; width: 40px; font-weight: 500; padding-left: 20px; color: #666;\"><i class=\"fa fa-picture-o\"></i></div><div class=\"progress\" style=\"background-color:#E2E2E2\">";
pictureBar = "<div class=\"progress-bar\" role=\"progressbar\" aria-valuenow=\"" + Number(spvalue.nodeValue) + "\" aria-valuemin=\"0\" aria-valuemax=\"" + Number(topspvalue.nodeValue) + "\" style=\"width:" + scorePicture + "%; background-color:" + pictureColor + ";\">" + scorePicture + "%</div>";
HTMLchunk1 = "</div> <div style=\"float: Right; text-align: right; width: 40px; font-weight: 500; padding-left: 20px; color: #666;\"><i class=\"fa fa-cogs\"></i></div><div class=\"progress\" style=\"background-color:#E2E2E2\">";
featureBar = "<div class=\"progress-bar\" role=\"progressbar\" aria-valuenow=\"" + Number(sfvalue.nodeValue) + "\" aria-valuemin=\"0\" aria-valuemax=\"" + Number(topsfvalue.nodeValue) + "\" style=\"width:" + scoreFeature + "%; background-color:" + featureColor + "\">" + scoreFeature + "%</div>";
HTMLchunk2 = " </div><div style=\"float: Right; text-align: right; width: 40px; font-weight: 500; padding-left: 20px; color: #666;\"><i class=\"fa fa-user\"></i></div><div class=\"progress\" style=\"background-color:#E2E2E2\">";
UIbar = "<div class=\"progress-bar\" role=\"progressbar\" aria-valuenow=\"" + Number(suivalue.nodeValue) + "\" aria-valuemin=\"0\" aria-valuemax=\"" + Number(topsuivalue.nodeValue) + "\" style=\"width:" + scoreUI + "%; background-color:" + uiColor + ";\">" + scoreUI + "%</div>";
HTMLchunk3 = "</div> <div style=\"padding-top: 3px;float: Right; text-align: right; width: 40px; font-weight: 500; padding-left: 20px; color: #666;\"><i class=\"fa fa-star\"></i></div><div class=\"progress progress-lg\" style=\"background-color:#E2E2E2;height: 30px;\">";
totalBar = "<div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"" + scoreTotal + "\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width:" + scoreTotal + "%; background-color:" + totalColor + ";font-size:1.1em;font-weight:600;\">Total: " + scoreTotal + "%</div></div>";
//Write the HTML
document.write(HTMLchunkStart + pictureBar + HTMLchunk1 + featureBar + HTMLchunk2 + UIbar + HTMLchunk3 + totalBar);
}
函数加载xmldoc(文件名)
{
if(window.XMLHttpRequest)
{
xhttp=newXMLHttpRequest();
}
else//IE5和IE6的代码
{
xhttp=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
xhttp.open(“GET”,filename,false);
xhttp.send();
返回xhttp.responseXML;
}
函数showTVscore(testNo){
//加载XML
xmlDoc=loadXMLDoc(“/testscores.xml”);
//提取图片的最高分数
tsp=xmlDoc.getElementsByTagName(“topscorePicture”)[0];
topspvalue=tsp.childNodes[0];
//提取特征的最高分数
tsf=xmlDoc.getElementsByTagName(“TopCoreFeature”)[0];
topsfvalue=tsf.childNodes[0];
//提取用户界面的最高分数
tsui=xmlDoc.getElementsByTagName(“topscoreUI”)[0];
topsuivalue=tsui.childNodes[0];
//提取特定测试编号的图片分数。
sp=xmlDoc.getElementsByTagName(“scorePicture”)[testNo];
spvalue=sp.childNodes[0];
//提取特定测试编号的特征分数。
sf=xmlDoc.getElementsByTagName(“scoreFeature”)[testNo];
sfvalue=sf.childNodes[0];
//提取特定测试编号的UI分数。
sui=xmlDoc.getElementsByTagName(“scoreUI”)[testNo];
suivalue=sui.childNodes[0];
//计算当前分数
scorePicture=Math.round(数字(spvalue.nodeValue)/数字(topspvalue.nodeValue)*100);
scoreFeature=Math.round(数字(sfvalue.nodeValue)/数字(topsfvalue.nodeValue)*100);
scoreUI=数学圆(数字(suivalue.nodeValue)/数字(topsiValue.nodeValue)*100);
scoreTotal=Math.round(0.5*scorePicture+0.25*scoreFeature+0.25*scoreUI);
//设置图片记分栏的颜色
开关(数学循环(scorePicture/10)){
案例1:
pictureColor=“#934F00”;
打破
案例2:
pictureColor=“#C36900”;
打破
案例3:
pictureColor=“#F28200”;
打破
案例4:
pictureColor=“C38D00”;
打破
案例5:
pictureColor=“#F2AF00”;
打破
案例6:
pictureColor=“#07ABFB”;
打破
案例7:
pictureColor=“#008ED3”;
打破
案例8:
pictureColor=“#006699”;
打破
案例9:
pictureColor=“#00537B”;
打破
案例10:
pictureColor=“#003F5D”;
打破
};
//设置特征记分栏的颜色
开关(数学轮(scoreFeature/10)){
案例1:
featureColor=“#934F00”;
打破
案例2:
featureColor=“#C36900”;
打破
案例3:
featureColor=“#F28200”;
打破
案例4:
featureColor=“C38D00”;
打破
案例5:
featureColor=“#F2AF00”;
打破
案例6:
featureColor=“#07ABFB”;
打破
案例7:
featureColor=“#008ED3”;
打破
案例8:
featureColor=“#006699”;
打破
案例9:
featureColor=“#00537B”;
打破
案例10:
featureColor=“#003F5D”;
打破
};
//设置UI记分栏的颜色
开关(数学轮(scoreUI/10)){
案例1:
uiColor=“#934F00”;
打破
案例2:
uiColor=“#C36900”;
打破
案例3:
uiColor=“#F28200”;
打破
案例4:
uiColor=“C38D00”;
打破
案例5:
uiColor=“#F2AF00”;
打破
案例6:
uiColor=“#07ABFB”;
打破
案例7:
uiColor=“#008ED3”;
打破
案例8:
uiColor=“#006699”;
打破
案例9:
uiColor=“#00537B”;
打破
案例10:
uiColor=“#003F5D”;
打破
};
//设置总记分栏的颜色
开关(数学轮(总分/10)){
案例1:
totalColor=“#934F00”;
打破
案例2:
totalColor=“#C36900”;
打破
案例3:
totalColor=“#F28200”;
打破
案例4:
totalColor=“C38D00”;
打破
案例5:
totalColor=“#F2AF00”;
打破
案例6:
totalColor=“#07ABFB”;
打破
案例7:
totalColor=“#008ED3”;
打破
案例8:
totalColor=“#006699”;
打破
案例9:
totalColor=“#00537B”;
打破
案例10:
到
function loadXMLDoc(filename, callback) {
var xhr = new XMLHttpRequest();
xhr.open("GET", filename);
xhr.onreadystatechange = function () {
if (this.readyState === 4 && this.status === 200) {
callback(this.responseXML);
}
};
xhr.send();
}
<script>
function showTVscore(x){
// load the xml data. it is parsed by jquery
$.get("testscores.xml", function(data) {
var $xml = $(data);
var y = $xml.find("item").length;
topScorePic = parseInt($xml.find("topscorePicture").text());
topScoreFeature = parseInt($xml.find("topscoreFeature").text());
topScoreUI = parseInt($xml.find("topscoreUI").text());
$xml.find("item").each(function(i, val) { // find the items in the xml and loop
// create an item object with all the necessary information out of the xml
var $this = $(this),
item = {
title: $this.find("title").text(),
link: $this.find("link").text(),
TopAward: $this.find("TopAward").text(),
RefAward: $this.find("RefAward").text(),
scorePic: parseInt($this.find("scorePicture").text(),10),
scoreFeature: parseInt($this.find("scoreFeature").text(),10),
scoreUI: parseInt($this.find("scoreUI").text(),10),
pricerunner: $this.find("pricerunnerLINK").text(),
year: $this.find("year").text(),
};
//Calculate scores relative to max values
scorePic = Math.round(item.scorePic / topScorePic*100);
scoreFeature = Math.round(item.scoreFeature / topScoreFeature *100);
scoreUI = Math.round(item.scoreUI / topScoreUI *100);
//Calculate total score
totalScore = Math.round(0.5*item.scorePic + 0.25*(item.scoreFeature + item.scoreUI));
// div with id "score" has the appropriate XML node added
if(item.title == x){
$('#score').append($(
//HTML code that loads everything goes here...
));
}
return i<(y-1); // (stop after y iterations)
});
});
};
</script>
<div class="col-xs-12 col-sm-6">
<div id="score">
</div>
</div>
<script>showTVscore('title of node I want to load)');</script>