尝试刷新分配给 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);
}); 

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

  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);

价格.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')
         ]
      );

您无法更新静态 PHP 变量,因为 PHP 脚本会向客户端发出请求、工作并应答,因此会话已关闭。有两种方法可以处理这个问题。

方式1:你必须将PHP连接到数据库。因此,您将向 PHP 文件发送请求,该文件会更新数据库中的数字,因此这些值将被保护,也适用于下一个请求。

方式2:您可以将 PHP 会话设置为 php.net 链接。因此,您将在会话中临时保存值。该会话将在一段时间后删除,也许这不是您需要的。会话类似于饼干。

这两种方式都通过 AJAX 请求工作。所以你需要一个Javascript函数,它将你的请求发送到那个PHP文件,这将更新数据库或会话。您还应该有一个函数来从数据库或会话中获取该值。

使用相同的方法(进行轮询)可以进行 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)相关的信息。