서버로부터 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을 로컬 변수 (이 함수의 범위에 로컬)에 할당하고이를 사용합니다 (현재 경고를 보내기 위해).
자, 문제는 내가 false
에 async
세트로이 기능을 사용하면, alert
호출이 성공적으로 [object XMLDocument]
을 반환한다는 것입니다. 그러나 내가 변경하자마자 async
을 true
으로 변경하면 null
이 alert
으로 인쇄됩니다.
내가 이해하는 것은 async:true
일 때 Ajax 호출로 XML이 반환되기 전에도 alert
이 마지막으로 호출된다는 것입니다. 마찬가지로 async:false
일 때, 이것은 직렬화 된 호출이고 제어가 마지막 alert
호출에 도달하면 XML이 이미 도착했습니다.
나는 그래서 무엇을해야합니까 :
- 나는 내가 그들을 사용할 수 있습니다 있도록 지역 변수에 아약스 호출에 의해 반환되는 응답 개체 (및 요청 객체)가 있습니다. 내
loadXML
기능으로 다시 기능이 호출에서 반환하는 방법을 모르겠지만 - 나는success
에 전달하는 경우 콜백 기능, 세 매개 변수를 가질 것이라고 이해합니다. - 이것은 Ajax 호출을 동기화로 변환 할 필요가 없다. 왜냐하면 이것은 내가 실행중인 함수 중 하나이기 때문이다. - 발행 될 많은 다른 Ajax 호출이 있기 때문에.
- 내 가정에서는
async:false
이이 함수에서 직렬화되었지만async:true
은 그렇지 않습니다.
답장을 보내 주셔서 감사합니다. 사실, XML도 가져오고, HTML 노드도 필요합니다. 그래서 제 문제는 콜백이 노드를 가지도록해야한다는 것입니다. (이 질문문에 암시 적이 아닌 경우 사과드립니다.) 어쨌든, 내 이해를 확인해 주셔서 감사합니다. – Shrey