2013-04-26 2 views
0

순수한 Javascript에서 AJAX 호출을 사용하여 몇 가지 실험을하고 있습니다 (JQuery 없음). 문제는다른 스타일의 Ajax 호출

<script type="text/javascript"> 
function call_test() { 
    document.getElementById("myId").innerHTML = ajax_call("example.php?id=1") ; 
} 
</script> 
<body> 

<input type="button" onClick="call_test()" value"Test"> 

<div id="myId">Result should be here</div> 

방법 ajax_call에서 결과를 반환 :이 같은 DIV 태그를 채울 수 있을까?

function ajax_call(remote_file) 
{ 
    var $http, 
    $self = arguments.callee ; 
    if (window.XMLHttpRequest) { 
     $http = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     try { 
      $http = new ActiveXObject('Msxml2.XMLHTTP'); 
     } catch(e) { 
      $http = new ActiveXObject('Microsoft.XMLHTTP'); 
     } 
    } 
    if ($http) { 
     $http.onreadystatechange = function() { 
      if (/4|^complete$/.test($http.readyState)) { 
       return http.responseText ; // This only return undefined 
      } 
     }; 
     $http.open('GET', remote_file , true); 
     $http.send(null); 
    } 
} 

원격 파일 : 그것 때문에 AJAX 요청의 비동기 특성 작동하지 않습니다

<?php 
    echo "<h1>Jus an experiment</h1>"; 
?> 
+0

은'document.getElementById를는 ("MYID")는 innerHTML을 = ajax_call는 ("example.php는 이드 = 1?").'ajax_call'는 비동기를 사용하지 않는다'것을 나타낸다 요청 방법. JavaScript _ 또는 유사한 주제에서 _synchronous 요청을보십시오. – Zeta

+0

Ok, 고마워요 –

답변

2

내 코드는 다음과 같이하지만, 작동하지 않습니다. 서버가 을 얻는 이유 인 html로 응답하기 전에 ajax_call 메서드가 반환됩니다.

여기 해결책은 콜백을 사용하여 아약스 응답의 사후 처리를 수행하는 것입니다.

function ajax_call(remote_file, callback) { 
    var $http, $self = arguments.callee; 
    if (window.XMLHttpRequest) { 
     $http = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
     try { 
      $http = new ActiveXObject('Msxml2.XMLHTTP'); 
     } catch (e) { 
      $http = new ActiveXObject('Microsoft.XMLHTTP'); 
     } 
    } 
    if ($http) { 
     $http.onreadystatechange = function() { 
      if (/4|^complete$/.test($http.readyState)) { 
       if (callback) 
        callback(http.responseText); 
      } 
     }; 
     $http.open('GET', remote_file, true); 
     $http.send(null); 
    } 
} 

그리고

function call_test() { 
    ajax_call("example.php?id=1", function(html) { 
     document.getElementById("myId").innerHTML = html 
    }); 
} 
+0

대단히 감사합니다. 다시 트레이에 보냅니다 : p –