2012-10-04 5 views
2

작성중인 웹 사이트에 여러 페이지에 사용되는 정보가 있습니다. 내가 설정 한 방법은 정보가 XML 파일에 저장된다는 것입니다. 그런 다음 AJAX를 사용하여 XML 파일을로드하고 성공하면 구문 분석 메서드를 호출하여 th를 추가합니다.div에 XML을로드 할 때 AJAX 경쟁 조건

경쟁 조건이 발생하는 것으로 보입니다. XML 파일의 구문 분석이 완료되기 전에 페이지로드가 완료됩니다. 파싱 ​​메서드에서 경고를 추가하면 잘 작동합니다 (이것이 내가 경쟁 조건이라고 생각하는 이유입니다).

function loadXML(link) { 

$('#div1').load(link); 
loadImage(link); 

if (link == "news.html") { 
    $.ajax({ 
     type: "GET", 
     url: "news.xml", 
     dataType: "xml", 
     success: newsParser 
    }); 
    } 
} 

온라인으로 검색했을 때 세마포어 또는 제한 시간을 사용했을 가능성이 있습니다. 이들 중 어느 것도 나에게 잘 맞지 않는 것처럼 보였다.

xml 앞에 html 페이지가로드되지 않으면 정보를 추가 할 div가 없습니다. 페이지로 이동하여 특정 페이지로 갈 때마다 구문 분석되지 않도록 데이터를 저장할 때 다른 xml 파일을로드하려고 시도했지만 그 내용을 제대로 파악하지 못했습니다.

제공되는 도움말에 감사드립니다.

+1

봐. 성공 함수를 실행하기 전에 두 호출이 모두 완료되었는지 확인합니다. http://api.jquery.com/deferred.then/ –

+0

페이지가로드 된 후 업데이트되는 일종의 라이브 피드를 만드는 경우가 아니면 서버의 데이터를 통합하는 것이 더 나을 것입니다. 따라서 AJAX와 이벤트 중심 프로그래밍의 모든 복잡성을 피할 수 있습니다. 또한 HTML 출력을 캐시 가능하게 만들어 계산을 저장합니다. –

+0

달성하려는 목표는 무엇입니까? 당신이 기대하고있는 순서와 예상되는 순서는 무엇입니까? –

답변

1

당신은 (당신이 이미 사용하고있는) jQuery를 사용하여로드 DOM을 기다릴 수 있습니다 $().ready() - deferreds에 http://api.jquery.com/ready/

$(document).ready(function(){ 
    $('#div1').load(link); 
    loadImage(link); 
    //etc.. 
} 
+0

현재 준비가 완료되었습니다. DOM이 페이지로드에 맞춰 준비가되지 않고 XML이 준비되지 않고있는 것처럼 보이는 것은 아닙니다. – jaime