0

这是我的代码:-

<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 文件,我尝试使用文本框输入的城市名称获取国家/地区名称,并将其存储str在我的第二个 xml 文件中的 var 上,我尝试使用此 var 查找国家/地区代码str
当我尝试在我的第二个 xpath 之前发出警报时,它没有给出任何错误但没有给出任何结果,然后它的工作我试图在第二个 xpath 之前发出警报,alert(str);
请帮助我解决这个问题。
谢谢。

4

1 回答 1

1

您遇到的问题$.get是异步的,这意味着它不会阻止执行并等待请求(获取 xml 文件)完成。

get_list函数中,您正在启动请求(调用$.get),然后在 3 行之后使用 xml 变量(xml.evaluate(...))。因为$.get没有阻塞,请求可能没有返回,你分配的回调xml = data将不会运行,因此xml不会被定义。

警报“修复”它的原因是警报确实阻塞,这为响应返回所需的额外时间。

$.get解决方案是通过将async = false选项传递给调用来强制同步运行(如文档所述),或者确保所有使用返回数据的代码仅在调用返回执行(通常通过从回调,尽管还有其他方式(例如承诺))。

注意:强制同步通常不是正确的答案,默认情况下它们是异步的,这是有原因的。

于 2013-04-22T06:43:03.187 回答