2013-02-02 3 views
0

저는 AJAX와 Javascript를 처음 사용하고 있으며 AJAX XMLHttpRequest가 반환 한 요소에 도달하는 데 문제가 있습니다.AJAX XMLHttpRequest에서 반환 한 요소를 어떻게 처리합니까?

나는 다른 웹 사이트에서 테이블을 인출하고,() 메소드를 보내 사용하여 내 페이지에 인쇄 된 후, 나는 그것의 요소에 액세스하려면 다음과 같이

시나리오입니다. 내가 왜 dystroy's post 덕분에 그것을 할 수 없는지 알게되었습니다. 나는 stackoverflow와 구글 검색했지만 유용한 아무것도 찾을 수 없었다. 내가 찾고있는 대답을 놓친 경우, 나는 중복 된 게시물에 대해 사과해야한다.

내 질문은 : 요청의 비동기 특성으로 인해 코드를 가져온 직후에 결과를 사용할 수 없으므로 요청 후에 가져온 요소에 액세스하는 방법은 무엇입니까?

귀하의 관심 & 도움 :) 주셔서 감사합니다

편집 :

는 기본적으로 나는 테이블을 가져 컨텍스트 지정 <div> 요소 (#table)로 작성하고 여기에 그 내용을 내 목표를 필터링 이제이를 다른 지정된 <div> 요소 (#derler)에 쓰고 두 번째 열 이외의 열만 숨 깁니다. 내가 직면하고있는 문제는 위에 언급 한 바와 같이 방금 가져온 테이블 요소에 연결할 수 없다는 것입니다. 지금

function fetchPage(str) 
     { 
      if(str=="") 
      { 
       document.getElementById("table").innerHTML=""; 
       $('#saatler').val(1); //some filtering configuration 
       $('#gunler').val(1); //resetting filters in other words 
       $('#bolumler').val(1); 
       return; 
      } 
      if (window.XMLHttpRequest) // code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp=new XMLHttpRequest(); 
      else // code for IE6, IE5 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 

      xmlhttp.onreadystatechange=function() 
      { 
       if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
        document.getElementById("table").innerHTML=xmlhttp.responseText; 
        document.getElementById("dersler").innerHTML=xmlhttp.responseText;       
       } 
      } 
      xmlhttp.open("GET", "fetch.php?url=http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb="+str, true); 
      xmlhttp.send(); 
      $('#saatler').val(1); //some filtering configuration 
      $('#gunler').val(1); //resetting filters in other words 
      $('#bolumler').val(1); 

      //after fetch, new filter 
      $("#dersler").find('table').css("background-color", "blue"); 
     } 

난 그냥 그 배경 블루 색상을 시도하고있다 : 여기

는 코드입니다. 문제는 내가 페이지를 가져올 때 테스트를 위해 만들어진 기존 테이블이 파란색으로 채워지지만 500ms 정도 지나면 새 테이블이 기존 예제 테이블에 덮어 쓰여지고 새 테이블의 배경이 파란색으로 채워지지 않는다는 것입니다. .

+1

"예가있다 . " 당신이 일할 수 없다면 당신을 도울 맥락이 필요합니다. – Hogan

+0

죄송합니다. 컨텍스트가 추가되었습니다. – Varaquilex

+0

jQuery를 사용하고있는 것을 보았습니다. 왜'$ .ajax()'를 사용하지 않으시겠습니까? – Hogan

답변

0

반환 후 더 많은 작업을 수행하려면 해당 기능을 콜백 함수에 추가하기 만하면됩니다. 코드에서 :

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
    document.getElementById("table").innerHTML=xmlhttp.responseText; 
    document.getElementById("dersler").innerHTML=xmlhttp.responseText;       
    // Add lots of good stuff here!! 
    } 
} 
다음

일 수 있습니다 또 다른 스타일은 분명 당신은 당신의 질문에 대답은 단순히 약자로, 우리에게 몇 가지 코드를 제시해야

function fetchPage(str) 
{ 
    // other stuff removed to save space 

    xmlhttp.onreadystatechange=postCallack; 

    xmlhttp.open("GET", "fetch.php?url=http://www.sis.itu.edu.tr/tr/ders_programlari/LSprogramlar/prg.php?fb="+str, true); 
    xmlhttp.send(); 

    // any stuff that goes here will happen before callback 
    // (this is a good place to update a UI element showing a call is resolving.) 
    // (for example a spinner or text saying "fetching") 

} 

function postCallback() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
     document.getElementById("table").innerHTML=xmlhttp.responseText; 
     document.getElementById("dersler").innerHTML=xmlhttp.responseText;       

    // continue to process post callback. 
    $('#saatler').val(1); //some filtering configuration 
    $('#gunler').val(1); //resetting filters in other words 
    $('#bolumler').val(1); 

    //after fetch, new filter 
    $("#dersler").find('table').css("background-color", "blue"); 
    } 
    else { 
    // report error with fetch 
    } 

} 
+0

답변 해 주셔서 감사합니다. 하하 쉬운 :) 분명히, 나는 절대 초보자 이래로 코드의 성질을 얻지 못했다. 나는 질문을 가지고있다. 이후 순차 프로그래밍하는 데 일종의, 내가 생각 xmlhttp.send() 가져 왔어 (나는 다른 소스에서 코드 블록을 복사 btw). 사실 그것은 가져 오기를 수행하지만 왜 사람들은 onreadystatechange 후에 그것을 쓰는 것을 선호합니까? 거기에 좋은 이유가 있습니까? – Varaquilex

+0

@ Volkanİlbeyli - 이것은 "콜백"및 "비동기"통신 작업 방식입니다. 이 조건에 대한 몇 가지 검색을 수행하면 내용이 정리됩니다. 하나의 문장 try >> 통신이 해결되는 동안 프로그램에서 다른 프로그램으로 넘어 가기 위해 컨트롤이 넘어 가게되므로 운영 체제 (브라우저)는 응답이 도착할 때 호출 할 진입 점 (함수)을 필요로합니다. – Hogan

+0

@ Volkanİlbeyli - 명확한 코드를 포맷팅하는 예를 보려면 제 대답을 참조하십시오. – Hogan

관련 문제