【问题标题】:Javascript variable not updating from PHPJavascript变量未从PHP更新
【发布时间】:2017-12-22 15:37:55
【问题描述】:

如何在每次运行脚本时更新我的​​ javascript 函数中的变量?该变量抓取一个 PHP 字符串,然后它似乎将其存储起来,并且在页面刷新完成之前不会更新该值。

脚本:

setInterval(function () {
        var options = {
            useEasing : true, 
            useGrouping : true, 
            separator : ',', 
            decimal : '.', 
        };
        var value123 = <?php echo $amount22; ?>;
        var value234 = <?php echo $unpaidbtc; ?>;
        var demo = new CountUp("counter", value123, value234, 10, 1, options);
        demo.start();
      }, 5000);

基本上它会在页面中为我的 php 获取 $unpaidbtc 值。该脚本将每 5 秒运行一次,但它不会使用 php 拥有的新值进行更新,而是使用它获取的第一个值并且永远不会更新为新的 PHP 字符串。

有没有办法让脚本更新并自动从页面中重新抓取 PHP 脚本?

示例:$unpaidbtc = 10 开始,$unpaidbtc = 15 5 秒后,但计数器只上升到 10。如何在不刷新页面和内容的情况下获取新值,谢谢!

【问题讨论】:

  • 你必须使用ajax。
  • “从来没有使用过” --- 现在你有了一个关键字,花几分钟做一个研究。
  • @ObsidianAge - 不过,该示例需要 jQuery。如果它尚未包含在 OP 的项目中,则无需包含它只是为了进行简单的 Ajax 调用。如果你使用原生 js,它实际上是 8 行代码......
  • 尽管这听起来微不足道——更新计数器——但事实并非如此。您必须确定要保存此计数器的位置。您可以将此计数器保存在 cookie/本地存储中,也可以将其保存在您的服务器上(使用文件或数据库)。将计数器保存在客户端计算机上意味着当您移动到另一台计算机时,计数器会有所不同。如果您将计数器保存在服务器上,每个人都会看到相同的计数器 - 但他们也都可以修改计数器。您还可以为不同的用户设置不同的计数器。 您可能应该向我们提供有关此的更多信息。
  • 问题中甚至没有提到“动画”。您能否更新问题以解决真正的问题

标签: javascript php html


【解决方案1】:

从 cmets 我想我明白你想要什么:

var ajax = new XMLHttpRequest();

function getValues(callback) {
    ajax.abort();

    ajax.open("GET", "index.php?showme=1", true);
    ajax.send();

    ajax.onreadystatechange = function() {
        if (ajax.readyState == 4 && ajax.status == 200)
            callback(JSON.parse(ajax.responseText));
    };
}

setInterval(function() {
    var options = {
        useEasing: true,
          useGrouping: true,
          separator: ',',
          decimal: '.',
    };

    getValues(function(obj) {
        var value123 = obj.amount22;
        var value234 = obj.unpaidbtc;
        var demo = new CountUp("counter", value123, value234, 10, 1, options);
        demo.start();
    });

}, 5000);

你可以只使用一个 PHP 页面,假设它被称为index.php

<?php

//do your database calls to get $amount22 and $unpaidbtc

if (isset($_GET['showme'])) {

    echo json_encode(array(
        'amount22'  => $amount22,
        'unpaidbtc' => $unpaidbtc
    ));
    exit;
}

//the rest of your page (with the html/javascript)

注意,如果你的页面不是叫index.php,你需要改变这一行:

ajax.open("GET", "index.php?showme=1", true);

【讨论】:

  • 这就是我想要的,但是有没有将 php 字符串从同一个文件转换为 json 并从该文件中读取它而不是使用该外部 php 文件?我可以用#来代替吗?
  • 是的,您可以将所有内容放在一页中。我已经编辑以显示如何。
  • # 符号,如果我理解正确的话,仅用于客户端导航,即 page.php#hello - PHP 无法读取此值。我使用 index.php?showme=1 仅显示 JSON 中的值。
  • 感谢您的时间和精力,我已经找到了一种方法来满足我的需要!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多