簡體   English   中英

嘗試刷新分配給PHP變量的JavaScript變量

[英]Trying to refresh JavaScript variable that is assigned to a PHP variable

我分配了兩個變量,它們等於可以隨時更改的PHP變量。 我正在嘗試每5秒更新一次div; 例如,更新號碼。 我假設這不起作用,因為一旦頁面加載,PHP就不會再次運行。 解決此問題的最佳方法是什么? 如果有必要,我不介意鏈接到另一個頁面。 這是我的代碼:

$(document).ready(function() {
    var buyprice = <?php echo $coinTicker->price($coin2[1] , 'buy'); ?>;
    var sellprice = <?php echo $coinTicker->price($coin2[1] , 'sell'); ?>;
    $('#currentbuyprice').html(buyprice);
    $('#currentsellprice').html(sellprice);
    setInterval(function() {
    var buyprice = <?php echo $coinTicker->price($coin2[1] , 'buy'); ?>;
    var sellprice = <?php echo $coinTicker->price($coin2[1] , 'sell'); ?>;
    $('#currentbuyprice').html(buyprice);
    $('#currentsellprice').html(sellprice);
   }, 5000);
}); 

您無法更新靜態PHP變量,因為PHP腳本會獲得請求,可以正常工作並可以響應客戶端,因此會話已關閉。 有兩種處理方法。

方法1:您必須將PHP連接到數據庫。 因此,您將向PHP文件發送請求,該文件將更新數據庫中的數字,因此對於下一個請求,這些值也將得到保護。

Way2:您可以使PHP Sessions php.net鏈接 因此,您將在會話中臨時保存您的值。 該會話將在一段時間后刪除,也許不是您所需要的。 會話類似於Cookie。

兩種方式都通過AJAX請求工作。 因此,您需要一個Javascript函數,該函數會將您的請求發送到該PHP文件,該文件將更新數據庫或會話。 您還應該具有從數據庫或會話獲取該值的功能。

是的-如您所知,這是行不通的。

  setInterval(function() {
    var buyprice = <?php echo $coinTicker->price($coin2[1] , 'buy'); ?>;
    var sellprice = <?php echo $coinTicker->price($coin2[1] , 'sell'); ?>;
    $('#currentbuyprice').html(buyprice);
    $('#currentsellprice').html(sellprice);
   }, 5000);

那是一個javascript + php。 瀏覽器運行javascript,而php在服務器上運行。 它們在不同的時間運行,並且互斥。 這項工作彼此分開。

如果要嘗試實時更新,您想做的(可能)是使用ajax調用。
http://api.jquery.com/jquery.ajax/

我發現api文檔可作為參考,但不好。

var jqXHR = $.ajax({
  url: "target.aspx",
  type: "GET",
  dataType: "html",
}).done(function (data, status, jqXHR) {
  $("#container").html(data);
  alert("Promise success callback.");
}).fail(function (jqXHR,status,err) {
  alert("Promise error callback.");
}).always(function () {
  alert("Promise completion callback.");
})

這是一個很好的例子。 谷歌“ jqXHR”的其他工作示例

$(document).ready(function() {
    var buyprice = <?php echo $coinTicker->price($coin2[1] , 'buy'); ?>;
    var sellprice = <?php echo $coinTicker->price($coin2[1] , 'sell'); ?>;
    $('#currentbuyprice').html(buyprice);
    $('#currentsellprice').html(sellprice);

    setInterval(function() {
        $.get('/get_prices.php', function( data ) {
            buyprice = data.buy;
            sellprice = data.sell;
            $('#currentbuyprice').html(buyprice);
            $('#currentsellprice').html(sellprice);
        }, "json" );
   }, 5000);
}); 

然后在您的后端(在此示例中為/get_prices.php ,請對其進行更改!)

<?php
$buy = 1;
$sell = 1;
echo json_encode(array(
    'buy' => $buy,
    'sell' => $sell,
));
exit;

您可以向單獨的php文件發出簡單的ajax get請求,該文件將數據返回為json:

setInterval(function() {
    $.get('/prices.php', function(data){
        $('#currentbuyprice').html(data.buyprice);
        $('#currentsellprice').html(data.sellprice);
    });
}, 5000);

prices.php:

//code that creates $cointTicker and $coin vars goes here
header('Content-Type: application/json');
echo json_encode(
         [
             'buyprice'  => $coinTicker->price($coin2[1] , 'buy'),
             'sellprice' => $coinTicker->price($coin2[1] , 'sell')
         ]
      );

使用相同的方法(進行輪詢),您可以進行ajax查詢

<!DOCTYPE html>
<html>
<head>
    <title>

    </title>
    <meta charset="utf-8" />
    <meta name="description" content="">
    <meta name="keywords" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js" charset="UTF-8"></script>
</head>
<body>
    <script>


    function send(){
        $.ajax({
            url: "a.php/",
            type: 'GET',
            success: function(res) {
                var myVars = JSON.parse(res);
                console.log(myVars[0].buyprice);
                $('#currentbuyprice').html(myVars[0].buyprice);
                $('#currentsellprice').html(myVars[0].sellprice);
            }
        });
    }
    setInterval(function(){ send() }, 3000);
    </script>

    currentsellprice:
    <div id="currentbuyprice">

    </div>
    currentsellprice:
    <div id="currentsellprice">

    </div>
</body>

這是服務器的最小部分

<?php
    $out = "[";
    $out .= '{"buyprice":"'. time(). '",';
    $out .= '"sellprice":"'. time()/2 . '"}'; 
    $out .="]";
    echo $out; 
?>

您可以在互聯網上找到許多與此主題相關的信息(ajax和json)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM