2011-08-24 36 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)。我的理解是,你需要傳遞沒有超時括號的函數。