这是我的代码: -
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$.get(
"final.xml",
null,
function (data) {
xml = data;
},
"xml"
);
function get_list(){
var city = $('#name').val();
var xPath = '//*[@value = "' + city + '"]/../../@value';
var iterator = xml.evaluate(xPath, xml.documentElement, null,
XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
var thisNode = iterator.iterateNext();
var str = '';
while (thisNode) {
if (str) {
str += ', ';
}
str += thisNode.textContent;
thisNode = iterator.iterateNext();
}
$.get(
"country_code.xml",
null,
function (data) {
xml = data;
},
"xml"
);
var code = str;
var xPath1 = '//*[@name = "' + code + '"]/@code';
var iterator = xml.evaluate(xPath1, xml.documentElement, null,
XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null);
var thisNode = iterator.iterateNext();
var str1 = '';
while (thisNode) {
if (str1) {
str1 += ', ';
}
str1 += thisNode.textContent;
thisNode = iterator.iterateNext();
}
$("#result").text(str1);
}
</script>
</head>
<body>
<input type="text" id="name" ></input>
<input type="button" name = "Get Code" onclick="get_list()"></input>
<div id="result">
</div>
</body>
</html>
这里我在第一个xml文件中有两个xml文件我尝试使用文本框输入城市名称获取国家/地区名称并将其存储在我的第二个xml文件中的var str
我尝试使用此查找国家/地区代码var str
。
它没有给出任何错误,但是当我尝试在我的第二个xpath之前发出警报然后它的工作时我没有给出任何结果我尝试在第二个xpath之前发出警报alert(str);
请帮我解决这个问题
谢谢。
答案 0 :(得分:1)
您遇到的问题是$.get
是异步的,这意味着它不会阻止执行并等待请求(获取xml文件)完成。
在get_list
函数中,您正在启动请求(调用$.get
),然后使用xml变量(xml.evaluate(...)
)启动3行。由于$.get
未阻止,因此请求可能尚未返回,分配xml = data
的回调将无法运行,因此xml
将无法定义。
警报“修复”它的原因是因为警告 阻止了,这给了回复所需的额外时间。
解决方案是通过将$.get
选项传递给调用(documented)来强制async = false
同步运行,或者确保使用所有代码返回的数据仅在调用返回后执行(通常是通过回调运行它,尽管还有其他方法(例如承诺))。
注意:强制同步通常不是正确的答案,默认情况下它们是异步的。