2010-07-05 3 views
1

서버로부터 XML을 가져 오는 데 Ajax API를 사용하는 간단한 JavaScript 코드가있다. 경로 응답이있는 HTML 페이지에서 DIV 소자 (W3C validator하여 테스트)를 유효 XML와 노드 점에 대응async로 jQuery Ajax를 호출하면 null이 리턴된다. responseXML

function loadXML(path, node) { 
    var response_obj = ""; 
    /* Fire Ajax request and get the XML */ 
    var request_obj = ""; 
    $.ajax({ 
     async: true, 
     type: "GET", 
     url: path, 
     dataType: "xml", 
     success: function(XMLObj, status, resquestObj) { 
      response_obj = XMLObj; 
      request_obj = requestObj; 
     }, 
     error: function(){ 
      alert("Unable to fire AJAX request"); 
     } 
    }); 
    alert(response_obj); //<-- This is NULL if async=true 
    /* More logic to follow which will use response_obj (XML) 
     and render it in the 'node' argument passed. */ 
} 

파싱 및 첨부한다.

내가 필요한 것은 Ajax 호출이 나를 구문 분석하고 렌더링 할 responseXML 개체를 반환해야한다는 것입니다. 이를 위해 응답 XML을 로컬 변수 (이 함수의 범위에 로컬)에 할당하고이를 사용합니다 (현재 경고를 보내기 위해).

자, 문제는 내가 falseasync 세트로이 기능을 사용하면, alert 호출이 성공적으로 [object XMLDocument]을 반환한다는 것입니다. 그러나 내가 변경하자마자 asynctrue으로 변경하면 nullalert으로 인쇄됩니다.

내가 이해하는 것은 async:true 일 때 Ajax 호출로 XML이 반환되기 전에도 alert이 마지막으로 호출된다는 것입니다. 마찬가지로 async:false 일 때, 이것은 직렬화 된 호출이고 제어가 마지막 alert 호출에 도달하면 XML이 이미 도착했습니다.

나는 그래서 무엇을해야합니까 :

  1. 나는 내가 그들을 사용할 수 있습니다 있도록 지역 변수에 아약스 호출에 의해 반환되는 응답 개체 (및 요청 객체)가 있습니다. 내 loadXML 기능으로 다시 기능이 호출에서 반환하는 방법을 모르겠지만 - 나는 success에 전달하는 경우 콜백 기능, 세 매개 변수를 가질 것이라고 이해합니다.
  2. 이것은 Ajax 호출을 동기화로 변환 할 필요가 없다. 왜냐하면 이것은 내가 실행중인 함수 중 하나이기 때문이다. - 발행 될 많은 다른 Ajax 호출이 있기 때문에.
  3. 내 가정에서는 async:false이이 함수에서 직렬화되었지만 async:true은 그렇지 않습니다.

답변

1

예, 언급 한 내용은 async:true입니다. 따라서 async가 true이면 alert()이 실패하고 async가 false이면 작동하지 않는 것이 당연합니다.

alert()을 성공 콜백에 넣어야합니다.

또는 함수를 ajaxSuccess이라고 말하고 성공한 경우 Callback()이라고 부를 수 있습니다. ajaxSuccess 기능에 alert()을 넣으십시오.

+0

답장을 보내 주셔서 감사합니다. 사실, XML도 가져오고, HTML 노드도 필요합니다. 그래서 제 문제는 콜백이 노드를 가지도록해야한다는 것입니다. (이 질문문에 암시 적이 아닌 경우 사과드립니다.) 어쨌든, 내 이해를 확인해 주셔서 감사합니다. – Shrey

관련 문제