2012-06-14 2 views
1

간단한 질문이 있습니다. 매개 변수 emp_id가있는 다른 매개 변수가있는 채팅에 대한 양식을 여는 함수가 있습니다. 자동으로 10 초마다 새로 고침합니다. 그것을 변경할 수있는 매개 변수가 emp_id 이후로 조금 잘못 작동, 일단 내가 그것을 변경, 메시지 및 양식과 채팅은 두 번 또는 세 번 새로 고쳐집니다 :) 얼마나 많은 시간에 u는 emp_id를 변경, 나는 어쨌든 여기에 자바 스크립트 함수입니다)) 내가 분명했다 희망 :함수는 setinterval에 따라 반복되지만 다른 매개 변수로 반복됩니다.

function load_chat(emp_id) { 
     var url = "#request.self#?fuseaction=objects2.popup_list_chatform" 
     url = url + "&employee_id=" + emp_id; 
     document.getElementById('form_div').style.display = 'block';       AjaxPageLoad(url,'form_div',1,'Yükleniyor'); 
     setInterval(function() { 
      load_chat(emp_id); 
     },10000); 
} 

이 내가 다른 사용자를 클릭하면 이름의 목록을 한 번 내가 그들 중 하나,이 양식은이 기능에 의해 열을 클릭하지만, 내가 emp_id를 변경하면 새로 고침됩니다. es, 이전 및 현재 양식. 어떻게 변경되었으므로 마지막 emp_id 만 새로 고치 겠지만 변경된 ID는 모두 새로 고치지 않습니다.

감사합니다. 도움을 주셔서 감사합니다. 정말로 감사드립니다!

+0

어디에서 변경하나요? – Bergi

+0

BTW : 그 간격에서 재귀 적으로 간격을 시작하는 것은 좋은 생각이 아닙니다 ... – Bergi

+0

@Bergi 저도 압니다. 문제가 있습니다. 선택한 emp_id 각각에 대해 반복됩니다.)) 마지막 것이 아닙니다. –

답변

2

이렇게하면 멋지게 캡슐화됩니다. 타이머 ID (tid)는 클로저 내부에 보관되므로 load_chat으로 전화하면 실행중인 경우 간격을 중지합니다.

새 URL이 설정되면 간격 타이머가 다시 시작됩니다.

var ChatModule = (function() { 
    var tid, 
    url; 

    function refresh() 
    { 
     AjaxPageLoad(url, 'form_div', 1, 'Yükleniyor'); 
    } 

    return { 
     load_chat: function(emp_id) { 
      if (tid) { 
       clearInterval(tid); 
      } 
      // setup url 
      url = "#request.self#?fuseaction=objects2.popup_list_chatform" 
      url = url + "&employee_id=" + emp_id; 
      document.getElementById('form_div').style.display = 'block'; 
      // load ajax 
      refresh(); 
      // set timer 
      tid = setInterval(refresh, 10000); 
     } 
    } 
}()); 

ChatModule.load_chat(123); 
+0

조금만 기다려주세요. 이걸 곧 확인해 보겠습니다. :) –

+0

123까지 이해했습니다. 다른 emp_id를 의미합니까?! –

+0

좋은 :) 정말 고마워, 내가 마침내 작동하게)) –

0

대신 setTimeout을 사용하십시오.

function load_chat(emp_id) { 
    ... // do something 
    if (condition_still_met) 
     setTimeout(function() { 
      load_chat(emp_id); // with same id 
     }, 10000); 
} 
load_chat("x"); // to start 

아니면 load_chat 함수 외부에서는 setInterval을 사용해야합니다 : 함수가 실행될 때마다, 그것은 (당신이 또한 조건부 만들 수) 다음 실행을 설정합니다. 필요한 경우 간격을 지울 수 있습니다.

function get_chat_loader(emp_id) { 
    return function() { 
     ... // do something 
    }; 
} 
var id = setInterval(get_chat_loader("x"), 10000); // start 

// then, somewhen later: 
clearInterval(id); 
+0

u, 내 함수 방식으로 조금 재 작성 할 수 있습니다 :) 나는 당신과 따라 잡지 못했습니다.) –

+0

왜 그것을 다시 작성 하시겠습니까? 너 이해하지 못했 니? – Bergi

관련 문제