从脚本中的另一个脚本执行函数

时间:2011-10-17 16:44:35

标签: php javascript jquery timeout

我在页面正文中运行了两个脚本。当在键盘上按下“a”时,另一个脚本运行。如何添加一些延迟然后再次触发第一个脚本?我试过下面的代码,它不起作用。可能,我想在第二个脚本的开头取消第一个超时。

 <script id="source" language="javascript" type="text/javascript">
$(function (){
  function reloading(){
      $.ajax({                                      
      url: 'api.php',                    
      data: "",                      
      dataType: 'json',             
      success: function(data)        
      {
        var id = data[0];             
          _id = id;
        var vname = data[1];           
        var message = data[2]; 
        var timestamp = data[3]; 
        var field1 = data[4]; 
        _field1 = field1;
        var val2 = parseInt(field1, 10) ;
        _val2 = val2;
        $('#output').hide().html( message ).fadeIn("slow");   
         $('#username').hide().html( vname +":" ).fadeIn("slow");
      setTimeout(function(){
      reloading();
    }, 60000);

      }
      });
  }
  reloading();
}); 
  </script>

  <script>
  $(document).jkey('a',function() {
     $.post("update.php", { "id": _id} )
      $('#output').hide().html( "<i>Message</i><br> <br>" +_val2 +" additional." ).fadeIn("slow");
      $('#username').fadeOut("fast");
      $('#valg1').fadeOut("fast");
      $('#valg2').fadeOut("fast");
      });
     setTimeout("reloading()",1000); 
</script>

2 个答案:

答案 0 :(得分:0)

快速破解,直到有人带来一个不会污染全球范围的更优雅的

<script id="source" language="javascript" type="text/javascript">
var tId;
function reloading(){
  $.ajax({                                      
    url: 'api.php',                    
    data: "",                      
    dataType: 'json',             
    success: function(data) {
      var id = data[0];             
      _id = id;
      var vname = data[1];           
      var message = data[2]; 
      var timestamp = data[3]; 
      var field1 = data[4]; 
      _field1 = field1;
      var val2 = parseInt(field1, 10) ;
      _val2 = val2;
      $('#output').hide().html( message ).fadeIn("slow");   
      $('#username').hide().html( vname +":" ).fadeIn("slow");
      clearTimeout(tId);
      tId=setTimeout(function(){ reloading();}, 60000);
    }
  });
}

$(function (){
  reloading();
}); 

$(document).jkey('a',function() {
  $.post("update.php", { "id": _id} )
  $('#output').hide().html( "<i>Message</i><br> <br>" +_val2 +" additional." ).fadeIn("slow");
  $('#username').fadeOut("fast");
  $('#valg1').fadeOut("fast");
  $('#valg2').fadeOut("fast");
  clearTimeout(tId);
  tId = setTimeout(function() { reloading()},1000); 

});
</script>

答案 1 :(得分:0)

您必须将reloaded()放在全局范围内才能从另一个脚本访问它。现在它位于一个匿名函数内(这有点可以减轻全局范围的污染)但是对于你的情况,如果将两个脚本合并为一个是不可行的,那么你将不得不污染全局范围。 / p>

如果是一次性功能,请给它一个唯一的前缀或其他内容:

myApp_reloaded();

如果您有一堆需要在全局范围内的函数,请创建一个包装器对象。你可以使用很多不同的模式,我更喜欢这个......

    function MyApp() {

    }
    MyApp.prototype.reloaded = function () {
     // reload func body here
    }




var myApp = new MyApp();

现在您可以全局访问这些方法:

myApp.reloaded();