2011-10-12 15 views
17

मैं निम्नलिखित जे एस कार्य:जे एस setInterval कार्यान्वित केवल एक बार

function checkIfGameAlreadyStarted(){ 
    $.get("IsGameAlreadyStarted",null,function(gameAlreadyStarted){ 
     if (gameAlreadyStarted == "true"){ 
      window.location = "index.jsp?content=game";  
     } else{ 
      alert("bla"); 
     } 
    }); 
} 

function joinGame(playerForm){ 
    $.get("GenerateClientID",null,function(clientID){   
     $.get("JoinGame",{ 
      "NAME" : playerForm.elements[0].value, 
      "ID" : clientID 
     } 
     ,function(gameParam){ 

      $("#waitingContainer").append("You have joined the game!<br\>Waiting for game creator to start game.."); 
      setInterval(checkIfGameAlreadyStarted(), 1000);  

     }); 
    }); 
} 

क्यों setInterval कार्यान्वित checkIfGameAlreadyStarted केवल एक बार, और हर दूसरे नहीं करता है?

उत्तर

56

आप फ़ंक्शन के बजाए फ़ंक्शन निष्पादित करने का परिणाम पारित कर रहे हैं। चूंकि फ़ंक्शन का नतीजा अनिर्धारित है, इसलिए आप checkIfGameAlyready स्टार्ट कर रहे हैं और फिर सेट इंटरवल को अपरिभाषित कर रहे हैं जो कुछ भी नहीं करता है।

इसके बजाय इस बात का

:

setInterval(checkIfGameAlreadyStarted(), 1000); 

अपने बयान इस होना चाहिए:

setInterval(checkIfGameAlreadyStarted, 1000); 
समारोह नाम के अंत में कोष्ठक के बिना

जब आप checkIfGameAlreadyStarted() पास करते हैं जो तुरंत फ़ंक्शन को कॉल करता है और उसे वापस लौटाता है। जब आप checkIfGameAlreadyStarted पास करते हैं जो फ़ंक्शन के संदर्भ को पास करता है तो सेट अंतराल इसे बाद में कॉल कर सकता है (जो आप चाहते हैं)।

संबंधित मुद्दे