2012-01-04 2 views
2

setInterval에 대해 읽었으며 한 페이지에서 여러 개의 Ajax 요청을 보내는 방법을 생각해 냈습니다. 문제는 단추 1을 누른 후 단추 2를 누르면 여러 요청을 보내는 것을 중지하고 단추 1을 다시 누르면 이전 setInterval()이 중지되지 않고 병렬 요청이 시작된다는 것입니다. 내가 달성하고자하는 것은 버튼 1을 누르면 30 번만 "1"을 인쇄해야하고 버튼 2를 누르면 5 초 동안 잠자기 상태에서 "1"을 인쇄하지만 인쇄를 중단해야합니다. 버튼 1을 다시 한번 누르면 "1"인쇄가 시작되고 "2"인쇄가 중지됩니다.setInterval 여러 Ajax 요청과 관련된 문제

<script language='javascript'> 
var request = 0; 
var request1 = 0; 
$(document).ready(function() { 
    $("#hi button").click(function() { 

     var id = this.id; 
     if(request!=0){ 
      clearInterval(request); 
      request1.abort(); 
     } 
     request = setInterval(do_it,1000,id);   
    }); 
}); 

function do_it(id) { 
     request1 = $.ajax({ 
     url: "php.php?id=" + id, 
     success: function (result) { 
      $("#result").html(result); 
      } 
     }); 
} 
</script> 

<div class="hi" id="hi"> 
    <button id="1" ></button> 
    <button id="2" ></button> 
    </div> 

<div id="result"></div> 

PHP 코드 : 어떤 도움에 감사드립니다

<?php 
$word=''; 
include('sql_connect.php'); 
if($_GET['id'] == '1') { 
    $main = '1'; 

    for($i = 0; $i < 30; $i++) { 
     $word .= $main . "<br>"; 
    } 
    echo $word; 
} 

if($_GET['id'] == '2') { 
    $a = 0; 

    while($a != 1) { 
     sleep(5); 
     $a=1; 
    }    
    echo "2"; 
} 
?> 

다음은 내 코드입니다. 덕분에

+0

당신이'request1.abort()'싶지 않아 다음과 같은 방법으로의 setTimeout을 사용? –

+0

예. 죄송합니다. 원본 스크립트에있는 내용입니다.여전히 같은 문제 – zista

답변

1

http://www.w3schools.com/jsref/met_win_setinterval.asp를 참조하거나 (예를 아래에 인용 부호로 쌌다) 익명의 기능을 사용할 수 있습니다. 또한 setInterval에 잘못된 세 번째 매개 변수를 지정하고 있습니다.

setInterval의 세 번째 매개 변수는 다음과 같습니다. Lang : 스크립팅 언어를 지정하는 선택적 매개 변수 (예 : Jscript, Javascript, vbscript).

setInterval(do_it, 1000, id); 

위의 답변을 보면

setInterval('do_it(' + id + ')', 1000); 
+1

또한 클라이언트 측에서 5 초 지연을 원할 수 있습니다. 서면에 따르면, 서버 코드는 ID = 2 인 모든 Ajax 호출에 대해 5 초 동안 일시 중지하며, javascript는 id = 2 인 많은 Ajax 메시지를 계속 전송하기 때문에 실제로 백업됩니다. $ a는 PHP 스크립트에 전송 된 후속 요청 또는 여기에서 생각한 내용을 유지하지 않습니다. – dqhendricks

+0

나는 그것을 시도했지만 이제는 아무 것도 인쇄하지 않는다. 내가 경고 할 때 (id); ("function do_it (id) { "다음에) [object HTML Button Element]라고합니다. 즉, 매개 변수를 제대로 전달하지 못한다는 의미입니다. – zista

0

나는 jquery에 익숙하지 않다. (나는 단지 자바 스크립트를 상자에 넣어 둔다.)하지만 나는 과거의 Timed 루프에서 AJAX 호출을 처리했다. 한 가지 고려해야 할 점은 비동기식 아약스 호출을하는 경우 이전의 아약스 응답이 호출 된 경우에도 setInterval/setTimeout이 계속 실행된다는 것입니다 (응답 함수에서 setTimeout을 호출 한 다음 ajax 요청 및 응답 호출 동기로 실행됩니다). 또는 당신은 단지 syncronous 아약스 통화를 할 수있는 - 그 의미를

0

을 만드는 경우가 있으므로 다시 if 문에 충돌 나던 clearInterval()request의 출력을 할당 할 수 있습니다 request = clearInterval(request);를 -이 undefined 동일하게 request의 원인이됩니다 그러므로 내가 같으면 '이 t 할, 상단에 변수를 할당 : - :

var request; 
var request1; 

... 

if(request) {...} 

또한 상당히 확실 setInterval()을하기위한 곳 중 3 번째로 PARAM 당신이 정의 함수에 전달하고자하는 가지 인자를하지 메신저 당신은 그렇게 할 것 012 setInterval을에서 함수를 설정하는 경우 375,

는 함수가 따옴표로 쌌다해야

+1

'(callback, delay [, additional-params])'는'setInterval'에 대한 유효한 구문 옵션이지만 IE에서는 작동하지 않습니다. – Aaron

+0

'request'의 값은 이미'if' 문 바로 밖에서 재 할당되었습니다. –

0

될 나에게 좋은 해결책을 찾을 도움이됩니다. 이것은 내가 무슨 짓을 :

request1 = $.ajax({ 

url: "php.php?id=" + id, 
success: function (result) { 
    $("#result").html(result); 
    do_it(id); 
} }); 


function do_it(id) { 
     //alert(id); 
     request1 = $.ajax({ 
     url: "php.php?id=" + id, 
     success: function (result) { 
      $("#result").html(result); 
      request = setTimeout(do_it,1000,id); 
      } 
     }); 
} 

나는 아직도 제대로의 setTimeout ('do_it ('+ 아이디 + ')', 1000)를 사용하여 매개 변수를 전달하지 수 있지만, , 그것은 나를 위해 일했다.

0

setTimeout(function(){ 
     do_it(id); 
    }, 1000);