PHP 会话变量和 JavaScript 变量是异步的



我有一个验证码生成器php脚本:

<?php
session_start();
header ("Content-type: image/png");
/*irrelevant parts here*/
$word = "";    
for ($i = 0; $i < 4; $i++) {
$letter = $letters[rand(0, $len - 1)];         
imagettftext($image, 15, 0, $i*50+25, 50, $text_color, $font, $letter);
$word .= $letter;
}
$_SESSION['captcha_string'] = $word;        
imagepng($image);
?>

我在我的 HTML/PHP 页面中这样称呼它:

<?php session_start(); ?>
<!DOCTYPE html>
.. some irrelevant code here ..
<img id="captchaimg" src="captcha_generator.php"> 

这是我的javascript代码,它位于同一个HTML/PHP页面上(我通过单击按钮调用此函数(:

<script type="text/javascript">
function validCaptcha() {           
var a = <?php echo json_encode($_SESSION['captcha_string']); ?>;
alert(a);
}
</script>

我的问题是javascript"迟到了",它获取会话变量的先前值,而不是实际值。我认为原因是当页面加载时,php 在 javascript 确实获取会话变量后运行。因此,javascript 看到的是上一个会话变量,而已经有一个新的会话变量。 如何在 javascript 函数中获取 ACTUAL 会话变量?

更新问题:javascript 函数何时获取会话变量?当页面加载或用户单击按钮时?

1.这里的问题是加载页面时只有变量 a= 会话值分配了会话值

2.在这里,您将在加载页面并重新分配会话值后创建验证码。

3.In PHP 会话值都会更新。但在JS中没有。

一种替代解决方案是在单击按钮时发送 AJAX 调用并从 PHP 返回 session($_SESSION['captcha_string']( 值。这可以解决您的问题。

好的,我找到了解决方案。关键>>我必须创建一个新的 php 文件(在示例中称为 captchavalue.php(,该文件只有一个任务:回显变量:

<?php 
session_start();
echo $_SESSION['captcha_string'];
?>

这是Ajax/Javascript(感谢您的建议(:

<script>
function validCaptcha() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("div_id").innerHTML = this.responseText;
}
};
xhttp.open("GET", "includes/captchavalue.php", true);
xhttp.send();
}
</script>

最新更新