2013-04-22 24 views
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文件,我是儘量使用文本框中輸入城市名獲得國家名稱和存儲在var str在我的第二個xml文件中,我嘗試使用這個var str來查找國家代碼。
它不會給任何錯誤,但沒有給出任何結果當我嘗試我的第二個XPath之前提醒那麼它的工作我正在嘗試這種alert(str);
請大家幫我出這第二個XPath之前提醒。
謝謝。

回答

1

您遇到的問題是,$.get是異步的,這意味着它不會阻止執行,並等待請求(xml文件的抓取)完成。

get_list函數您正在啓動請求(調用$.get),然後3行後面使用xml變量(xml.evaluate(...))。因爲$.get不會阻止,請求可能沒有返回,您分配xml = data的回叫將不會運行,因此xml將不會被定義。

警報「修復」它的原因是因爲警報確實有區塊,這會給響應回來所需的額外時間。

的解決方案是力$.get到通過傳遞async = false選項到呼叫(如documented),或通過確保所有,使得使用所返回的數據的呼叫有後只執行代碼的同步運行返回(通常通過從回調中運行它,儘管還有其他方式(例如承諾))。

注意:強制同步通常不是正確的答案,它們在默認情況下是異步的。