2014-08-31 57 views
0

我在jquery和ajax方面不是很有經驗,但我需要以下內容。用戶成功登錄後,他們可以從該頁面下載PDF文件。該網站有一個崩潰div,他們可以從中選擇要下載的文件。一切都在PHP中完成,並行得通。但是,如果找不到文件,摺疊div將被關閉。換句話說,網頁被重新加載。因此,用戶必須新作出新的選擇,這是不方便的。所以我會以下。如果找不到該文件,那麼div應該保持摺疊狀態,並在表單上的輸入字段's'中保留以前的值。我知道這應該通過jQuery或JavaScript來完成。我嘗試了以下,但它不起作用。在php post方法中使用jquery

  //PHP 

    <?php 
    //if download is clicked 
    if (isset($_POST["download"])) { 
    $data = $_POST["s"]; 

    //if file is found 
    if (fileexists($data){ 
    // We'll be outputting a PDF 
    header('Content-type: application/pdf'); 

    // It will be called downloaded.pdf 
    header('Content-Disposition: attachment; filename="downloaded.pdf"'); 

    // The PDF source is in original.pdf 
    readfile($data); 
    } 
    //else the div should remain open 
    else{ 
     echo "<script> if ($('#collapseOne').is(':hidden')) { 
       $('#collapseOne').show(); 
       }</script>"; 
    } 
    } 
    ?>    

     <div id="collapseOne" class="panel-collapse collapse"> 
      <div class="panel-body"> 
       <form id='searchForm' method="post" action=''> 
       <p><label>Select Month</label></p> 
       <input id='s' name = 's' type='text' required><br><br> 
       <button type="submit" id='download' name='download' class='btn btn-default btn-lg'> 
        <span class='glyphicon glyphicon-download-alt'></span> Download 
       </button> 
       <br> <br> 
       <button id='download1' name = 'download1' class='btn btn-default btn-lg'> 
        <span class='glyphicon glyphicon-download-alt'></span> Download All 
       </button> 
       </form>    
       </div> 
     </div> 
+1

的可能重複[如何從PHP傳遞變量和數據的JavaScript?](http://stackoverflow.com/questions/23740548/how-to-pass-variables-and-data-from-php -to-javascript) – 2014-08-31 14:13:05

回答

0

總之,你呼應PHP到JavaScript

<script> 
    $(document).ready(function(){ 
     var hasDownload = "<?php echo $_POST['download']; ?>"; 
     var oldInput = "<?php echo $_POST['s']; ?>"; 
     if(hasDownload == false) { 
      $('#collapseOne').show(); 
      $('input#s').val(oldInput); 
     } 
    })   
</script> 

當服務器提供文件,這些值將出席你的Javascript。把你的jQuery放在另一個if語句的底部&這是一個doc準備好的塊,這樣dom首先被加載並且將你的PHP變量回顯成Javascript變量來執行你的jQuery邏輯。

<?php 

    if (isset($_POST["download"]) && fileexists($_POST["s"]) { 
     header('Content-type: application/pdf'); 
     header('Content-Disposition: attachment; filename="downloaded.pdf"'); 
     readfile($_POST["s"]); 

    } 

?>    

<div id="collapseOne" class="panel-collapse collapse"> 
    <div class="panel-body"> 
     <form id='searchForm' method="post" action=''> 
      <p><label>Select Month</label></p> 
      <input id='s' name = 's' type='text' required><br><br> 
      <button type="submit" id='download' name='download' class='btn btn-default btn-lg'> 
       <span class='glyphicon glyphicon-download-alt'></span> Download 
      </button> 
      <br> <br> 
      <button id='download1' name = 'download1' class='btn btn-default btn-lg'> 
       <span class='glyphicon glyphicon-download-alt'></span> Download All 
      </button> 
     </form>    
    </div> 
</div> 

<?php if(isset($_POST["download"]) == false && fileexists($_POST["s"] == false) : ?> 
    <script> 
     $(document).ready(function(){ 
      var hasDownload = "<?php echo $_POST['download']; ?>"; 
      var oldInput = "<?php echo $_POST['s']; ?>"; 
      if(hasDownload == false) { 
       $('#collapseOne').show(); 
       $('input#s').val(oldInput); 
      } 
     })   
    </script> 
<?php endif; ?> 
+0

嗨你的代碼工程。感謝那。由於我有另一個崩潰的div,當表單被提交併且javascript被執行時,舊數據出現在div中。然而,當我嘗試然後打開我的第二個div第一個保持可見,扭曲的HTML頁面?你有什麼想法如何解決這個問題?例如,我需要JavaScript執行一次,以便用戶可以打開他們想要的任何div – george 2014-08-31 14:59:50

+0

第二個div的id或class是什麼?你基本上想要在另一個正確的時候切換? – 2014-08-31 15:02:48

+0

是的,正好是id =「collapseTwo」。我希望允許用戶在提交表單後選擇第二個div,並且頁面應該繼續工作,而不需要第一個div保持打開狀態 – george 2014-08-31 15:05:33

0

試試用這個吧!

$.ajax({ 
    url:"/path/to/your/script/", 
    type: "post", 
    data: //fetch the data which you want to pass 
}).done(function(status){ 
    //status is the data returned from the script called 
}); 
+0

我應該把它放在一個不同的.js文件中嗎? – george 2014-08-31 14:22:34