两个循环JS函数相互冲突

时间:2012-08-20 18:47:15

标签: php javascript jquery loops

所以我有两套JavaScript函数可以连续调整我的服务器,如果数据库已经更新,那么这些函数可以做些什么。这两组功能彼此无关;他们唯一的关系就是他们同时发生。但由于某种原因,一个功能与另一个功能相冲突。这是我的代码的样子:

<!DOCTYPE html>
<html>
<head>
<title>Stage</title>
<link href="stage.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script>
<script type="text/javascript">

 ///////////////////// FUNCTION SET 1 

function loadThumbnail(){
  $.ajax({
    url: 'process_stage_show.php',
    data: 'value=<?php echo $_GET["session"]; ?>',       
    dataType: 'json',                           
    success: function(data){
      var idCurrent = data[0];
      var idVideo = data[1];
      var idSession = data[2];
      var state = data[4];
      if (state ==  1) {
        $('#tv').html('<img src="http://i.ytimg.com/vi/'+ idVideo +'/hqdefault.jpg" width ="800" height="533"/>');
        setTimeout(function(){timedCount2(idCurrent);},1000);
      }
      else {
        setTimeout(function(){timedCount2(idCurrent);},1000);
      }
    }
  });
}

function timedCount2(idCurrent){
  $.ajax({                                      
    url: 'process_stage_show.php',                
    data: 'value=<?php echo $_GET["session"]; ?>',       
    dataType: 'json',
    success: function(data) {  
      var idNew = data[0];  
      var idVideo = data[1];
      var idSession = data[2];          
      var state = data[4];          
      if (!(idCurrent == idNew)) {
        window.location.reload();
      }
      else{
        setTimeout(function(){timedCount2(idCurrent);},1000);
      }
    } 
  });
}

 ///////////////////// FUNCTION SET 2 

function loadStage(){
  $.ajax({
    url: 'process_stage_play.php',            
    data: 'value=<?php echo $_GET["session"]; ?>',       
    dataType: 'json',                               
    success: function(data){                    
      var idVideo = data[0];        
      var idCurrent = data[1];
      var idSession = data[2];
      var state = data[4];
      if (state ==  2) {
        //alert("State equal to 2. Do nothing.");
        setTimeout(function(){timedCount(idCurrent);},1000);
      }
      else if (state == 1) {
        //alert("State equal to 1. Open window.");
        popupwindow = window.open ("http://www.youtube.com/watch_popup?v="+ idVideo);
        setTimeout(function(){timedCount(idCurrent);},1000);
      }
      else if (state == 0) {
        //alert("State equal to 0. Close window.");
        popupwindow.close();
        setTimeout(function(){timedCount(idCurrent);},1000);
      }
    }
  });
}

function timedCount(idCurrent){
  $.ajax({                                      
    url: 'process_stage_play.php'             
    data: 'value=<?php echo $_GET["session"]; ?>',
    dataType: 'json',                               
    success: function(data) {  
      var idVideo = data[0];  
      var idNew = data[1];
      var idSession = data[2];          
      var state = data[4];          
      if (idCurrent == idNew) {
        setTimeout(function(){timedCount(idCurrent);},1000);
      }
      else{
        //alert("ID has changed. Re-load stage.");
        loadStage();
      }
    } 
  });
}

</script>
</head>

<body onload="loadStage(); loadThumbnail();">

<div id="tv"></div>

</body>
</html>

我不想详细了解这些功能集的功能(除非请求),因为我不希望这篇文章真的很长。但问题是这些函数集本身都能正常工作,但出于某种原因,如果你同时运行它们,第二个函数集会一直说当状态等于0时没有定义popupwindow。

哪个没意义!为什么第一个函数集会导致这种情况发生? :(

2 个答案:

答案 0 :(得分:1)

第一个函数有时会做的一件事就是重新加载窗口。一旦发生这种情况,全局变量“popupwindow”就会消失。

弹出窗口中的代码可能会定期检查其“开启者”窗口以查看它是否应自行关闭。

答案 1 :(得分:1)

我是否理解这些功能都会打开一个弹出窗口? 如果是这样,某些浏览器每个网页只打开一个弹出窗口,如果打开另一个弹出窗口,旧网址将刷新新网址。

因此,其中一个函数可能会失去“它的”弹出窗口,这可以解释你的问题。

相关问题