尝试获取国家代码但没有警报它不起作用

时间:2013-04-22 06:26:37

标签: javascript xpath

这是我的代码: -

<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);
请帮我解决这个问题 谢谢。

1 个答案:

答案 0 :(得分:1)

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

get_list函数中,您正在启动请求(调用$.get),然后使用xml变量(xml.evaluate(...))启动3行。由于$.get未阻止,因此请求可能尚未返回,分配xml = data的回调将无法运行,因此xml将无法定义。

警报“修复”它的原因是因为警告 阻止了,这给了回复所需的额外时间。

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

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