2015-05-15 27 views
7

我想實現一個計時器。我從SO帖子中學到了這個想法。如何讓我的php變量可訪問?

<?php 

    if(($_SERVER['REQUEST_METHOD'] === 'POST') && !empty($_POST['username'])) 
    { 
    //secondsDiff is declared here 
    $remainingDay  = floor($secondsDiff/60/60/24); 
    } 
?> 

這是我的php代碼。我的PHP,HTML和JS代碼在同一頁面。我在我的html中有一個按鈕。當用戶點擊HTML頁面上,它會調用Ajax的功能

     //url:"onlinetest.php", 
         //dataType: 'json', 
         beforeSend: function() 
         { 
          $(".startMyTest").off('click'); 
          setCountDown(); 
         } 

它將調用setCountDown()方法,其中包含在一開始

 var days = <?php echo $remainingDay; ?>; 

線當我運行該頁面,它說[甚至在點擊按鈕之前] "expected expression, got '<'"在上面的行中。我的疑問是

爲什麼這個php變量在觸發按鈕之前被替換。請讓我知道鋤頭來解決這個問題或如何改變我的想法。

+1

看起來你需要將文件重命名爲'something.php' –

+0

是的,我的文件名是testOnlineTest.php –

+0

,如果你的'變種天= ...'行是在外部JavaScript文件,這將不起作用,因爲它不通過php解析器運行。 –

回答

8

的問題是,由於初始加載,$_POST值不填充(第一次加載空),

您設置的變量是不確定的,只是確保你初始化變量的拳頭。

<?php 
// initialize 
$remainingDay = 1; 
if(($_SERVER['REQUEST_METHOD'] === 'POST') && !empty($_POST['username'])) 
{ 
    //secondsDiff is declared here 
    $remainingDay  = floor($secondsDiff/60/60/24); 
    echo json_encode(array('remaining_day' => $remainingDay); 
    exit; 
} 
?> 

<script> 
var days = <?php echo $remainingDay; ?>; 
$('.your_button').on('click', function(){ 
    $.ajax({ 
     url: 'something.php', 
     dataType: 'JSON', 
     type: 'POST', 
     beforeSend: function() { 
      // whatever processes you need 
     }, 
     success: function(response) { 
      alert(response.remaining_day); 
     } 
    }); 
}); 
</script> 

這僅僅是基本的想法,我只是說其他代碼對於具體的例子,只是添加/更改需要在你身邊你的邏輯多數民衆贊成的其餘部分。

+0

是的,謝謝。讓我檢查一下。 –

+0

@GopsAB只要使用'document.URL'或者硬編碼url即可。 – Ghost

+0

@GopsAB雖然我建議不要走這條路線,但是你的代碼會變得混亂,只是將實際處理你從JS發來的請求的PHP頁面與響應做的分開。 – Ghost

2

試試這個,

var days = "<?php echo $remainingDay; ?>"; 
2

您可以通過一個php可變進JS類似的代碼

var jsvariable ="<?php echo $phpvariable ?>"; 

注:

如果你想傳遞一個PHP的json_encoded價值JS,你可以做

var jsonVariable = <?php echo $json_encoded_value ?>; //Note that there is no need for quotes here