2013-04-22 2 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 파일이 내가 생각 텍스트 상자에 입력 한 도시의 이름을 사용하여 국가 이름을 얻기에 시도 내 두 번째 XML 파일에 var str에 저장이 변수를 사용하여 국가 코드를 찾으려고합니다 str.
자사의 두 번째 xpath 전에 경고하려고 할 때 어떤 오류도주지 않고 결과를주지 않습니다. 두 번째 xpath 전에 경고하려고 시도합니다. alert(str);
도와주세요.
감사합니다.

답변

1

당신이 가지고있는 문제는 $.get이 비동기입니다. 즉, 실행을 차단하지 않고 요청 (XML 파일 가져 오기)이 완료 될 때까지 기다리지 않습니다.

get_list 함수에서 요청을 시작한 후 ($.get) 3 행 후 xml 변수 (xml.evaluate(...))를 사용합니다. $.get이 차단되지 않기 때문에 요청이 반환되지 않았을 수 있습니다. xml = data을 할당 한 콜백이 실행되지 않으므로 xml이 정의되지 않습니다.

경고가 "수정"되는 이유는 응답 블록을 수행하기 때문에 응답이 돌아 오는 데 추가 시간이 필요하기 때문입니다.

이 솔루션은, 또는 반환 된 데이터의 사용이 호출이 후 실행 전용 만드는 모든 코드를 확인함으로써 (documented로) 호출에 async = false 옵션을 전달하여 동 기적으로 실행하는 힘 $.get 하나에 있습니다 (일반적으로 예를 들어 약속) 다른 방법이 있지만 콜백에서 실행하여 반환됩니다.

참고 : 동기를 강제하는 것이 일반적으로 올바른 대답이 아니며, 이유 때문에 기본적으로 비동기입니다.

관련 문제