2010-02-20 5 views
2

페이지에 HTML을 채우는 두 가지 호출을 만들기 위해 AHAH (여기에 설명 된대로 http://microformats.org/wiki/rest/ahah)를 사용하고 있습니다. 이 호출은 문서가 준비된 후에 발생하고 차례로 호출됩니다. 결과는 매번 마지막 호출 응답으로 덮어 쓰게되는 첫 번째 호출입니다. 따라서 두 개의 고유 한 코드 대신 페이지에 동일한 HTML 덩어리 중 두 개를 사용할 것입니다. 때때로 첫 번째 호출은 콜백을 평가하지 않으므로 비어 있습니다.자바 비동기 호출이 서로 스테핑을 수행합니다.

아이디어가 있으십니까?

답변

2

해당 페이지에서 정확한 코드를 사용하는 경우, 예를 들어 XMLHttpRequest를 저장하기 위해 단일 전역 변수를 사용하는 것처럼 놀라운 일은 아닙니다. 따라서 둘 이상의 동시 요청에 대해 작동 할 수있는 방법이 없습니다. 두 번째로 함수를 호출하면 req을 새 것으로 덮어 쓰므로 ahahDone에 의해 읽혀진 req이 잘못된 요청이됩니다.

당신이해야이 (그것을 function ahah()var를 선언하여) req에게 지역 변수를 확인하고 ahahDone() 함수에 target로를 통과 할 수 있도록합니다. 아니면 그냥 인라인을 수행

function Element_loadHTML(element, url) { 
    var req= null; 
    if (window.XMLHttpRequest) { 
     req= new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     try { 
      req= new ActiveXObject('MSXML2.XMLHttpRequest'); 
     } catch() {} 
    } 
    if (!req) { 
     element.innerHTML= 'Browser does not support XMLHttpRequest'; 
     return; 
    } 
    element.innerHTML= 'Loading...'; 

    req.onreadystatechange= function() { 
     if (req.readyState===4) 
      element.innerHTML= req.status===200? req.responseText : 'Error '+req.status; 
    }; 
    req.open('GET', url); 
    req.send(null); 
} 

Element_loadHTML(document.getElementById('appdata'), 'appdata.part.html'); 
Element_loadHTML(document.getElementById('foo'), 'bar.part.html'); 

브라우저 스니핑 및 스크립트 태그를 실행하려고 가진 물건을 희망하고 고장; 그것을 사용하지 마십시오. 페이지에 <script> 요소 콘텐츠를로드하는 것은 좋지 않습니다.

+0

PREFECT, 나는 왜 내가 전에 그것을 보지 못했는지 모르겠다. 고맙습니다! 또한 스크립트 태그 실행 부분을 사용하지 않습니다. 정말 나쁜 생각 일뿐입니다. – Matt

관련 문제