Javascript 使用innerHTML的setInterval函数未更新

Javascript 使用innerHTML的setInterval函数未更新,javascript,function,setinterval,innerhtml,Javascript,Function,Setinterval,Innerhtml,我只是不明白为什么这不会更新输出中显示的内容。我做了一个JSFIDLE供任何人看 下面是代码: function getPrices(basePrice){ var dogeValue = 0.005343614; //When changed the output should change. var postage = 0.49/dogeValue; var sellAmount = (basePrice/dogeValue - postage) - (basePr

我只是不明白为什么这不会更新输出中显示的内容。我做了一个JSFIDLE供任何人看

下面是代码:

function getPrices(basePrice){
    var dogeValue = 0.005343614; //When changed the output should change.
    var postage = 0.49/dogeValue;
    var sellAmount = (basePrice/dogeValue - postage) - (basePrice*0.1/dogeValue);
    rounded = Math.round(sellAmount);
    document.getElementById("txt").innerHTML = rounded;
}
var timer = setInterval(function() { getPrices(10) }, 1000);
原始/完整代码:

<html>
<script>
var rounded = 0;
    function getPrices(basePrice){
        var dogeValue = <?php echo(file_get_contents("https://www.dogeapi.com/wow/?a=get_current_price")); ?>;
        var postage = 0.49/dogeValue;
        var sellAmount = (basePrice/dogeValue - postage) - (basePrice*0.1/dogeValue);
        rounded = Math.round(sellAmount);
        document.getElementById("txt").innerHTML = rounded;
    }
    var timer = setInterval(function() { getPrices(10) }, 1000);
</script>
<body onload="getPrices(10);">
    <div id="txt"></div>
</body>

var四舍五入=0;
函数getPrices(基本价格){
var dogeValue=;
var邮资=0.49/美元;
var sellAmount=(基价/多价-邮资)-(基价*0.1/多价);
四舍五入=数学四舍五入(销售金额);
document.getElementById(“txt”).innerHTML=四舍五入;
}
var timer=setInterval(函数(){getPrices(10)},1000);

如果您查看控制台,它会说
未捕获引用错误:未定义sellAmount

原因:变量
sellAmount
的定义中缺少空格:您编写了
varsellAmount=…

使用此选项,它将起作用:

function getPrices(basePrice){
    var dogeValue = 0.005343614; //When changed the output should change.
    var postage = 0.49/dogeValue;
    var sellAmount = (basePrice/dogeValue - postage) - (basePrice*0.1/dogeValue);
    var rounded = Math.round(sellAmount);
    document.getElementById("txt").innerHTML = rounded;
}
var timer = setInterval(function() { getPrices(10) }, 1000);
请在此处查看更新的feedle:

编辑:在您编辑的问题之后,请查看此小提琴:

输出总是相同的,因为dogeValue的值始终保持不变。您必须更改该值,才能看到输出中的更改

这是新代码:

var dogeValue = 0.005343614; //When changed the output should change.
function getPrices(basePrice){

    var postage = 0.49/dogeValue;
    var sellAmount = (basePrice/dogeValue - postage) - (basePrice*0.1/dogeValue);
    var rounded = Math.round(sellAmount);
    document.getElementById("txt").innerHTML = rounded;
    dogeValue+=0.1;
}
var timer = setInterval(function() { getPrices(10) }, 1000);
编辑2:编辑问题后,答案保持不变-您仍然可以全局定义它:

<html>
<script>
var rounded = 0;
var dogeValue = <?php echo(file_get_contents("https://www.dogeapi.com/wow/?a=get_current_price")); ?>;

    function getPrices(basePrice){        
        var postage = 0.49/dogeValue;
        var sellAmount = (basePrice/dogeValue - postage) - (basePrice*0.1/dogeValue);
        rounded = Math.round(sellAmount);
        document.getElementById("txt").innerHTML = rounded;
        dogeValue+=0.1; //change it
    }
    var timer = setInterval(function() { getPrices(10) }, 1000);
</script>
<body onload="getPrices(10);">
    <div id="txt"></div>
</body>

var四舍五入=0;
var dogeValue=;
函数getPrices(basePrice){
var邮资=0.49/美元;
var sellAmount=(基价/多价-邮资)-(基价*0.1/多价);
四舍五入=数学四舍五入(销售金额);
document.getElementById(“txt”).innerHTML=四舍五入;
dogeValue+=0.1;//更改它
}
var timer=setInterval(函数(){getPrices(10)},1000);

您可以将php标记放在代码中的任何地方——不管它们是否在函数内部或外部。此代码与您的代码完全相同,唯一的区别是
getPrices()
现在可以更改
dogeValue

PHP部分在页面加载时只执行一次。查看源代码(右键单击页面“ShowSourceCode”),您将看到静态分配的值,因为它是在页面加载到浏览器之前用PHP生成的。请记住,Javascript和PHP是在不同的上下文中执行的:PHP>服务器端,Javascript>客户端


解决您的问题的一点帮助:。

不幸的是,我希望事情就这么简单。一定是我复制代码时发生的格式错误。我还意外地提供了错误的JSFIDLE。我原来的帖子已经更新了。当您编辑dogeValue的值时,数字应该在结果面板中更改。它确实会更改-如果您更改代码中的值。变量本身总是有相同的值,它永远不会被改变。所谓改变,我的意思是不需要重新运行代码。这就是为什么我有
var timer=setInterval(function(){getPrices(10)},1000)在底部,它应该每秒运行一次函数,如果值被更改,它应该写一个不同的结果。但是在哪里更改值呢?在第二个示例中,我不重新运行代码。每次启动setInterval时,数字都会改变。嗯,我已经查看了您的编辑有一段时间了,仍然不明白为什么我必须在函数外部声明dogeValue,我需要在函数中使用它,因为我没有将它赋给一个常量,而是将它赋给了一些嵌入的PHP代码,这些代码与函数中的值相呼应:因此,每次运行我的函数时,我都需要dogeValue得到一个新的赋值,因为该网站上的数字发生了变化。你能告诉我们输出应该如何随着时间的推移而变化吗时间?当然,您可以看到我所做的“原始/完整代码”编辑,并查看我在哪里定义了dogeValue。PHP代码从网站上获取值,每隔几分钟就会更改一次。好吧,现在这很清楚:PHP部分在页面加载时只执行一次:DHmm,好吧,这就是我的问题。尽管在一个应该被重复的函数中,由于某种奇怪的原因,php只被调用一次。有没有关于如何解决这个问题的想法?这并不奇怪:)Javascript和PHP在不同的上下文中执行:PHP>服务器端,Javascript>客户端。