2013-06-14 2 views
0

내 JavaScript에서 변수 EventCounter을 지속적으로 확인하는 루프가 있는데, eventcounter가 0이면 액션이 실행되고 ++가 증가하고 변수가 변경 될 때까지 아무 것도하지 않습니다. 코드 :AJAX를 사용하여 웹 서버에서 변수를 요청하려면 어떻게해야합니까?

EventCounter = {{eg.globals.EventCounter}};  

for(var i = 0; i < n; ++i) { 
       r = rects[i]; 
       ctx.strokeRect((r.x*sc)|0,(r.y*sc)|0,(r.width*sc)|0,(r.height*sc)|0); 
       window.rects = rects[i];      
       //console.log(EventCounter); 
       if (EventCounter === 0) {    
        console.log("event counter is" + EventCounter) 
        //setTimeout(function() {document.getElementById("sb").click()}, 5000) 
        EventCounter++ 
        console.log("event counter is now " + EventCounter);        
       } 

      } 
     } 

이제 EventCounter 전역 변수는 웹 서버 (파이썬 웹 서버와 파이썬 변수)에서 값을 가져옵니다.

하지만 내 질문은 변수가 웹 서버에서 변경된 것을 어떻게 감지합니까? 아약스 요청이 맞습니까? 루프가 다시 실행될 수 있도록 변경된 경우 변수 값을 검색하도록 요청하려면 어떻게해야합니까? (** 서버가 PHP와 호환되지 않습니다.)

+0

AJAX 요청이 확실히 수행 할 수 있지만이 정보를 계속해서 서버에 폴링하도록 제안하지 않았 으면합니다. 폴링 빈도를 줄이기 위해 setInterval을 살펴 봐야합니다. –

+0

AJAX로 어떻게 처리했는지 궁금해서 웹 소켓을 사용할 수 없다고 말하면됩니다. 나는 그것에 대해 어떻게 갈 것인가? – user2266621

답변

0

WebSockets을 살펴보십시오. 서버가 연결되면 원하는 때마다 브라우저에 메시지를 보낼 수 있습니다. Javascript 이벤트 핸들러로 들어오는 메시지를 처리하므로 지속적으로 폴링 할 필요가 없습니다.

WebSocket은 IE10을 포함한 모든 주요 브라우저에서 지원됩니다. 물론 서버 애플리케이션이 웹 소켓도 지원할 수 있는지 확인해야합니다.

0

Mike W와 같이 WebSocket을 사용할 수 있습니다.

또한 파이썬 서버에 스크립트를 작성하여 호출 할 때 JSON을 리턴 한 다음 원하는 변수와 해당 값을 JSON 파일에 포함 할 수 있습니다. 이것은 WebSocket과 같은 최신 브라우저 대신 모든 브라우저에서 지원됩니다.

0

다음은 1000ms마다 서버 스크립트를 폴링하여 결과를 표시하는 jQuery 구현입니다. 일반적인 응답 시간 + 브라우저 처리 시간은 폴링 간격보다 현저히 적어야하거나 요청이 백업 될 수 있습니다.

자바 스크립트 :

<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
     <title>eventCounter</title> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
     <script type="text/javascript"> 

      var interval = setInterval(function() { 
            // this is where your ajax call is made. 
       $.ajax('geteventcounter.php', { 
        cache: false, 
        dataType:'json', 
        success: function(data) { 
              // do your browser-side processing here. 
        $('#eventCounter').text(data.eventcounter); 
        } 

       }); 
      }, 1000);    
     </script> 
    </head> 
    <body> 
<p>eventCounter is <span id=eventCounter></span></p> 
    </body> 
</html> 

서버 측 PHP :이 예를 들어 , 그것은 모든 요청에 ​​증가하고 JSON 문자열을 반환하는 세션 변수를 사용합니다.

<?php 
session_start(); 
    // initialise counter, or increment it. 
if (isset($_SESSION['eventcounter'])) { 
    $_SESSION['eventcounter']++; 
} else { 
    $_SESSION['eventcounter'] = 0; 
} 
    // set output mime type 
header("ContentType: application/json"); 

    // copy session variable to a new array, convert to JSON and send. 
echo json_encode(['eventcounter' => $_SESSION['eventcounter']]); 

?> 
+0

서버가 PHP – user2266621

+0

과 호환되지 않습니다. AJAX로 변수를 요청하는 방법을 물었습니다. 내가 예제를 주었고, 완성을 위해 테스트 할 PHP 스크립트를 제공했다. 이것은 최종 솔루션이 될 필요가 없습니다. 사용자의 요구에 맞춰이를 생산 표준으로 가져와야합니다. –

관련 문제