我有一个使用纯javascript ajax的html-js-php页面。
该页面是一份使用负载和信息的问卷。保存你设置。当您点击下一个按钮时,它会保存当前显示的问题,并加载下一组问题。还有一个上一个按钮,最后是一个提交按钮。
html页面有一个容器用于所有内容,然后ajax会引入问题和按钮。
意外的结果是php变量没有与字符串的其余部分一起回显。 php代码位于第二个代码块中,证明此结果的代码位于第三个代码块中。
这是简化的容器:
<body onload="loadSlide(<?php echo $_GET["ID"]; ?>, 'Next', hdn_Section_Counter.value)">
<div id="div_Questionnaire" class="Main_Content" >
<p class="Main_Content_Title"> Plannning For Success - Questionnaire </p>
<div class="Sub_Content" id="div_Questions">
<p class="Sub_Content_Title"> Questions </p>
<div id="div_Question_Holder"><!--Holds the questions-->
</div>
<input id="hdn_Section_Counter" type="hidden" value="0" Subject="1" Category="1" Section="1"/>
<!--Keeps track of current slide under 2 counting forums - section count (values 1-22), and Subject-Category-Section-->
</div>
</div>
</body>
第一组问题是通过body onload加载的,它调用对加载问题的php文件的ajax调用。跳到问题所在的PHP代码部分...(仅显示“上一步”按钮)
/*$_POST["ID"] was sent over through ajax in the send() method (using POST)
$_SESSION["uid"] is created on login, there is a session_start() (to resume
the session) at the beginning of the php file.*/
if($_POST["ID"]==$_SESSION["uid"]){
$Viewing_Student=false;
}else{
$Viewing_Student=true;
}
var_dump($Viewing_Student);//displays "false" as a boolean value
echo"<input class='Nav_Button' id='btn_Previous' type='button' value='Previous' onclick=\"saveSlide('/my-site/Tools/Planning_For_Success/save_slide.php', ".$_POST["ID"].", this.value, ".$Viewing_Student.")\"/>";
问题是$ Viewing_Student没有进入html。除了一个变量之外,其他所有内容都会到达html。这使得它更加令人困惑,因为$ _POST [&#34; ID&#34;]被连接并正确显示,但不是这个变量。
如注释中所述,变量包含一个值(布尔值为false),这由var_dump检查。
我知道通过查看chrome,firefox和microsoft edge开发人员工具来显示变量:(这里的代码是从chrome开发人员工具中复制的)
<input class="Nav_Button" id="btn_Previous" type="button" value="Previous" onclick="saveSlide('/my-site/Tools/Planning_For_Success/save_slide.php', 1, this.value, )">
变量应该显示在saveSlide()参数的末尾,如下所示:
"this.value, false)"
使用echo语句的所有内容看起来都很好,它甚至可以回声。除此之外,一个变量总是丢失。
清楚地说明我的问题...为什么这个变量($ Viewing_Student)没有被其余的字符串/变量回显?我该如何解决这个问题?
我正在使用的程序/语言/版本:
HTML 5
JS(也是纯javascript AJAX)
PHP 7
Sublime 3
Apache 2.4.17(全部在1个WAMP下载中)
答案 0 :(得分:2)
您无法将PHP布尔值转储到Javascript(甚至纯文本)中:
?FromListExplicit
注意?as.Node.list
如何成为零长度字符串。这会在您的代码中产生JS语法错误。
基本上,从不输出&#34;文字&#34;从PHP直接进入Javascript上下文。正是这样的情况会产生JS语法错误并终止整个脚本块。始终使用php > echo 'x' . true . 'x';
x1x
php > echo 'x' . false . 'x';
xx
:
false
答案 1 :(得分:2)
这是你必须要知道的一件小事,布尔“假”将被回显为“”&lt; - 空字符串,你可以从Amazon Specs检查它:
布尔值TRUE值转换为字符串“1”。 Boolean FALSE转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。
答案 2 :(得分:1)
问题是布尔值不是字符串而PHP根本不显示 false 值。所以我建议你替换这一行:
var_dump($Viewing_Student);//displays "false" as a boolean value
这一个:
echo $Viewing_Student?'true':'false';
答案 3 :(得分:0)
听起来你想要字符串,而不是布尔值
if($_POST["ID"]==$_SESSION["uid"]){
$Viewing_Student='false';
}else{
$Viewing_Student='true';
}