2015-05-15 11 views
7

Tôi đang cố gắng triển khai bộ hẹn giờ. Tôi đã học được ý tưởng này từ một bài viết SO.Làm cách nào để biến php của tôi có thể truy cập?

<?php 

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

Đây là mã php của tôi. Các mã php, html và JS của tôi nằm trong cùng một trang. Tôi có một nút trong html của tôi. Khi người dùng nhấp vào trang html, Nó sẽ gọi một hàm Ajax

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

Nó sẽ gọi phương thức(), trong đó có một dòng ngay từ đầu

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

Khi tôi chạy trang setCountDown , nó nói [thậm chí trước khi nhấp vào nút] "expected expression, got '<'" trong dòng trên. Nghi ngờ của tôi là

Tại sao biến php này được thay thế trước khi tôi kích hoạt nút. Xin vui lòng cho tôi biết cuốc để giải quyết điều này hoặc làm thế nào để thay đổi ý tưởng của tôi.

+1

Hình như bạn cần phải đổi tên tập tin của bạn cho 'something.php' –

+0

Vâng, tên file của tôi là testOnlineTest.php –

+0

nếu' của bạn var ngày = ... 'dòng là trong một tập tin bên ngoài javascript, điều này sẽ không hoạt động vì nó không chạy qua trình phân tích cú pháp php. –

Trả lời

8

Vấn đề là, kể từ khi tải ban đầu, $_POST giá trị đều không phổ biến (trống trên nạp đầu tiên),

Đó biến bạn thiết lập là undefined, chỉ cần đảm bảo bạn khởi tạo mà nắm tay biến.

<?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> 

Đó chỉ là ý tưởng cơ bản, tôi vừa thêm các mã khác cho ví dụ cụ thể đó, chỉ cần thêm/thay đổi phần còn lại của logic cần thiết ở bên cạnh bạn.

+0

Có, Cảm ơn. Hãy để tôi kiểm tra điều này. –

+0

@GopsAB chỉ sử dụng 'document.URL' hoặc mã hóa url nếu bạn muốn. – Ghost

+0

@GopsAB mặc dù tôi khuyên bạn không nên đi tuyến đường này, mã của bạn sẽ bị lộn xộn, chỉ cần tách trang PHP thực sự xử lý yêu cầu bạn gửi từ JS, từ phản hồi làm những gì bạn phải làm. – Ghost

2

Hãy thử điều này,

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

Bạn có thể vượt qua một biến php vào JS mã như

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

LƯU Ý:

Nếu bạn đã bao giờ muốn để vượt qua giá trị json_encoded của php để JS, bạn có thể làm

var jsonVariable = <?php echo $json_encoded_value ?>; //Note that there is no need for quotes here 
Các vấn đề liên quan