如何将每2秒刷新的JavaScript价格变量值传递给PHP变量
核心问题说明
你当前的写法错误本质是搞混了PHP和JavaScript的执行顺序,你写的<?php $results = "<script>document.write(results)</script>"?>完全无效,直接删掉即可:
- PHP是服务端语言,在页面返回给用户浏览器之前就已经全部执行完毕,不可能直接读取到浏览器端后续才运行的JavaScript变量
- 上述代码只是把
<script>document.write(results)</script>这段纯文本字符串赋值给了PHP的$results变量,不会执行拿到JS的实时价格值
解决方案
要把客户端实时更新的价格传给PHP,需要通过AJAX请求把JS变量主动发送给后端PHP接口,修改步骤如下:
第一步:修改JavaScript代码,新增请求传递价格
你可以直接复用现有XMLHttpRequest逻辑,在拿到Draco价格的回调里新增请求即可,修改后的display函数如下:
function display() { client.get('https://api.mir4global.com/wallet/prices/draco/daily', function(response) { var retorno = JSON.parse(response); preco = retorno.Data[retorno.Data.length - 1].USDDracoRate var input = document.querySelector('input'); valor = input.value; localStorage.setItem('dracoVlr1', input.value); const formattedPrice = parseFloat(preco).toFixed(4) document.title = 'Draco' + ' - $' + formattedPrice; document.getElementById('dracoVlr').innerHTML = "Preço do Draco" + ' - $' + formattedPrice; // 新增:把格式化后的价格发送给后端PHP const sendPriceReq = new XMLHttpRequest() sendPriceReq.open("POST", "save_draco_price.php", true) // 设置请求头,确保PHP可以正常接收POST参数 sendPriceReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded") sendPriceReq.send("draco_price=" + formattedPrice) // 可选:接收PHP返回的处理结果 sendPriceReq.onreadystatechange = function() { if (sendPriceReq.readyState == 4 && sendPriceReq.status == 200) { console.log("价格已同步到后端:" + sendPriceReq.responseText) } } }); client2.get('https://api.binance.com/api/v3/ticker/price?symbol=BUSDBRL', function(response) { var binance = JSON.parse(response); console.log(binance.price) document.getElementById('dracodolares').innerHTML = 'Total em Dólares: $' + (valor * preco).toFixed(4) document.getElementById('dracoreais').innerHTML = 'Total em Reais: R$' + ((valor * preco)*binance.price).toFixed(4) }); client3.get('https://api.binance.com/api/v3/ticker/price?symbol=EURBUSD', function(response) { var binance3 = JSON.parse(response); console.log(binance3.price) document.getElementById('dracodolares').innerHTML = 'Total em Dólares: $' + (valor * preco).toFixed(4) document.getElementById('dracoeuro').innerHTML = 'Total en Euros: EUR' + ((valor * preco)*binance3.price).toFixed(4) }); }
第二步:新增PHP接收文件(示例命名为save_draco_price.php)
在这个文件里你可以拿到实时价格,完成你需要的存储、计算等业务逻辑:
<?php // 接收JS传递的价格参数 $results = isset($_POST['draco_price']) ? $_POST['draco_price'] : 0; // 这里写你自己的业务逻辑,比如存数据库、写缓存、计算手续费等 // 示例:存入SESSION,方便站点内其他PHP页面调用这个实时价格 session_start(); $_SESSION['current_draco_price'] = $results; // 可选:返回结果给前端 echo $results; ?>
注意事项
- 如果站点内其他PHP页面需要使用这个实时价格,直接在对应页面开启SESSION后读取
$_SESSION['current_draco_price']即可 - 价格每2秒刷新一次,后端收到的价格也会同步每2秒更新,符合你的定时刷新需求
内容的提问来源于stack exchange,提问作者Robert Nixon
相关产品推荐
相关产品推荐

