我正在尝试使用 Java 脚本作为基于 Java 的 Restful Web 服务的客户端。该服务是一个调查制作者。我无法使该功能正常工作。该服务的服务器端位于 Google App Engine 中。在下面的代码中,该函数使用 http get 获取表示调查名称列表的 xml,然后从 xml 获取数据并将其放入 html 表中。该代码无法正常工作,因此如果有人可以检查它以查看我是否正确执行此操作或我做错了什么,那就太好了。我从来没有用 javascript 编程过,所以我也想知道我是否需要导入库才能使用 AJAX,或者浏览器是否支持它?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="en-us" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>View Surveys</title>
</head>
<SCRIPT>
function getSurveyNames(){
var url = "http://survey-creator.appspot.com/rest/surveymakerpro/allsurveys";
var xmlhttp;
// AJAX code for Mozilla, Safari, Opera etc.
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = xmlhttpChange;
xmlhttp.open("GET", url, true);
xmlhttp.send(null);
}
// AJAX code for IE
else
if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
if (xmlhttp) {
xmlhttp.onreadystatechange = xmlhttpChange;
xmlhttp.open("GET", url, true);
xmlhttp.send(null);
}
}
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
HTMLSurveyNames = "<table border='1'><tr>Survey Names<th></th></tr>";
var surveyNames = xmlhttp.responseXML.documentElement.getElementsByTagName("surveys")[0];
for(var i = 0; i < surveyNames.length ;i++){
var surveyNameChildNode = surveyName[i].childNodes[0];
var name = surveyNameChildNode.nodeValue;
HTMLSurveyNames += "<tr><td>"+name+"</td></tr>";
}
//div tags
document.getElementById('displayNames').innerHTML = HTMLSurveyNames;
}
}
</SCRIPT>
<body>
<p>View Survey</p>
<form method="post">
<input name="GetSurveys" style="width: 103px" type="button" value="View all surveys" onClick=getSurveyNames(); /></form>
<p>Here Goes a Table of Surveys</p>
<div id="displayNames">
<p>Enter the survey you wish to take:</p>
<form method="post">
<input id="surveyName" name="SurveyName" style="width: 140px" type="text" value="Enter Survey Name...." /></form>
<form method="post">
<input name="Submit2" type="submit" value="Get Survey" /></form>
<div id="displaySurvey"></div>
</div>
<p>
<input id="sendtoserver" name="Submit3" type="submit" value="Submit TakenSurvey" /></p>
</body>
</html>
这是我要解析的xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><surveyNames><SurveyList><surveys>DragonBallZ</surveys><surveys>FootballSurvey</surveys><surveys>NewsSurvey</surveys><surveys>PennstateSurvey</surveys></SurveyList></surveyNames>
最佳答案
您正在发送一个异步请求,但随后尝试在该请求完成之前立即处理结果。
您应该为
xmlhttp.onreadystatechange
分配一个处理程序这将随着您的请求的进行而执行。您当前分配xmlhttpChange
到这个属性,但你不显示什么xmlhttpChange
是。你应该做这样的事情:xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { // XML parsing code goes here } }
您无需导入任何库即可使用 Ajax
小心
HTMLSurveyNames = "<table border='1'><tr>Survey Names<th></th></tr>";
这样的行您应该始终使用var
声明变量时的关键字,以避免隐式创建/修改全局变量。
关于javascript - 帮忙用 javascript 解析 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365999/