2011-08-24 110 views
0

我在这里疯狂地试图弄清楚为什么这个脚本不再像预期的那样执行了(它昨天工作很好,但是我做了一些小的修改并且没有支持它现在我无法弄清楚问题所在)。JavaScript setTimeout函数没有按预期执行

<form method="POST" name="inventory_check" id="inventory_check">  
     <input type="text" name="stock_part" id="part_input"> 
     <input type="hidden" name="site" value="2"> 
     <input type="submit" value="Check Stock" id="submit"> 
    </form> 

    <?php 
     if(isset($_POST['stock_part'])) { 
      $part = strtoupper($_GET['stock_part']); 
      $site = $_POST['site']; 
      $filename = 'system/inventory/'.$part.'.txt'; 
      if(file_exists($filename)) { 
       $handle = fopen($filename, 'r'); 
       $content = fread($handle, filesize($filename)); 
       $content = trim($content, '&l0O(10U'); 
       $content = trim($content, 'E'); 
       fclose($handle); 
       date_default_timezone_set('UTC'); 
       $mod_date = (filemtime($filename)); 
       $current_date = time(); 
       $subtract_date = ($current_date - $mod_date); 
       $subtract_date = ($subtract_date/3600); 
       if ($subtract_date <= 12) { 
        $stock = number_format($content); 
        echo '<script>document.inventory_check.style.display="visible";</script>'; 
        echo '<div id="stock_results">There are '.$stock.' '.$part.' in stock.</div>'; 
       } 
       else { 
        echo 'File too old.'; 
       } 
      } 
      else { 
       echo '<iframe src="http://example.com/inventory_check.php?part='.$part.'&site='.$site.'" height="50" width="150"></iframe>'; 
       echo '<script>document.inventory_check.style.display="none";</script>'; 
       echo '<div align="center"><img src="http://www.aifittingsproto.com/images/load.gif"><br /><br />Searching</div>'; 
       echo '<script>setTimeOut("recheck()", 2000);</script>'; 
      } 
     } 
    ?> 
    <script> 
    function recheck() { 
     document.inventory_check.stock_part.value="<?php echo $part ?>"; 
     document.inventory_check.site.value="<?php echo $site ?>"; 
     document.inventory_check.submit(); 
    } 
    </script> 

基本上这检查我们的内部服务器(不同于web服务器的域)上某个项目的库存。我试图完成的是零件号码中的用户密钥......首先它检查我们的服务器上是否存在ftp-ed文件..如果是这样,它会检查它检查的时间是否比12小时更新,然后如果是,则显示它。如果没有,它会打开一个iframe并将变量发送到我们的内部服务器进行处理,所有这些都按预期工作。我的问题是,我需要能够重新检查变量是否通过iframe后文件存在。我试图通过重新发送变量并每2秒提交一次表单来设置它。查看源代码,所有变量都按预期方式填充,等等,但不是循环并重新提交表单。任何建议为什么这是失败,或更好的方法?提前致谢。

+4

发布您的代码生成的输出,而不是服务器端代码本身。我已经可以看到你的'setTimeout'调用使用了一个字符串作为参数,而不赞成使用函数回调。 – zzzzBov

+0

输出似乎正在正确地工作到一个点。如果该文件存在,它会正确显示并按预期显示。如果文件太旧,则显示“文件太旧”。但是,如果该文件不存在,则会生成iframe,按预期运行,表单被隐藏,并显示加载gif,这就是停止的位置。在那之后没有动作,所以它必须挂在setTimeout调用上。 –

+0

请记住,我不关心消毒输入等。我只是试图获得预期的功能,然后将建立。 –

回答

0

您应该尝试用setTimeout("window.reload", 2000)替换setTimeout("window.reload()", 2000)。我的理解是,你需要传递没有超时括号的函数。