javascript - 如何修复将 PHP 变量的值传递给 javascript 变量
问题描述
挑战是如何获取包含消息长度(存储在 MYSQL 数据库中)的某个 PHP 变量($length)以传递给 javascript 变量(var = length),以便让 javascript 决定是否在 HTML 页面上显示某个选取框。
我正在为一所小学准备一个网站。在特定页面上,他们希望有一个字幕,向父母显示一些最新或紧急的信息。如果您查看www.transitum.org/try_1页面,您会看到此类字幕的示例。如果您查看www.transitum.org/try_2页面,您会看到前一页的副本,不同之处在于字幕仍然存在,但在此页面上没有显示任何消息。
两个选取框都是用 iframe 生成的,它的缺点是当没有显示消息时,iframe 仍然会占据一些垂直高度。理想情况下,当没有提供消息(内容)时,我希望 iframe 根本不可见。
显示给父母的消息是通过 PHP 脚本从 MYSQL 数据库中获取的。这个 PHP 脚本的一部分也是导出每条消息的长度(这是通过:$length = strlen($result[.....]); 完成的)并回显结果(如 echo json_encode($length) ;) 以允许使用 JSON/AJAX 脚本进行进一步处理。
javascript 本身通过 if else 语句检查消息是否存在(因此长度> 0,因此显示 iframe)或是否没有消息(因此长度 = 0,因此不显示 iframe)运行完美。
挑战是如何获取包含消息长度(存储在 MYSQL 数据库中)的某个 PHP 变量($length)以传递给 javascript 变量(var = length),以便让 javascript 决定是否在 HTML 页面上显示某个选取框。
在www.transitum.org/try_3 上,我正在运行以下脚本。
<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$.ajax({
type:'POST',
url:'https://www.transitum.org/linski_nach/check3.php',
dataType: "json",
data:{length:length},
success:function(data){
console.log(data);
if(data.status == 'ok'){
var length = JSON.parse(length);
} else {}
}
});
});
document.write(length);
</script>
如果我查看控制台日志,则会显示数字“53”,这确实是Try 1页面上显示的消息长度的正确值。但是上面的脚本总是给我“0”。因此我不能让javascript“检测”消息是否存在是/否以及是否需要显示iframe是/否。
2019-08-26:所有 3 个答案都让我很好地了解了将 php 变量的值传输到 javascript 变量的机制是如何工作的。
@Halfer:我将为解决我的问题的最后一步打开一个单独的主题。在这个地方,我现在只添加修改后的脚本和两个链接,表明Polywhirl先生提供的代码基本可以工作。他的以下代码(带有 if else javascript 添加)被输入到 HTML 页面中。
<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
type: 'POST',
url: 'https://www.transitum.org/linski_nach/check3.php',
dataType: "json",
data: { length: length },
success: function(data, textStatus, jqXHR) {
console.log(data); // 53
if (textStatus === 'success' && jqXHR.readyState === 4) {
length = JSON.parse(data); // Set the global variable
if(length <1)
{
document.write(length);
document.write('<table><td>no message available</td></table>');
}
else
{
document.write(length);
document.write('<iframe src="https://www.transitum.org/linski_nach/test3.php" width="100%" height="55" border="no" scrolling="no"></iframe>');
}
} else {
// Do nothing...
}
}
});
});
</script>
目前通过链接Try_5显示消息长度和消息自身。
目前通过链接Try_6显示消息的长度和消息本身(只有没有消息的公告)。
现在唯一的问题是 HTML 页面本身不再显示......我正在尝试找出如何获取我的 HTML 页面,如Try 1所示。任何建议都受到高度赞赏。
解决方案
您在异步 Ajax 调用完成之前将长度写入页面。
此外,您错误地使用了成功功能。
var length = 0; // Global value
$(document).ready(function() {
$.ajax({
type: 'POST',
url: 'https://www.transitum.org/linski_nach/check3.php',
dataType: "json",
data: { length: length },
success: function(data, textStatus, jqXHR) {
console.log(data); // 53
if (textStatus === 'success' && jqXHR.readyState === 4) {
length = JSON.parse(data); // Set the global variable
} else {
// Do nothing...
}
document.write(length); // Write out global length value
}
});
});
推荐阅读
- sql - 查询中的 Listagg 具有别名
- java - 春季安全工作仅适用于最高优先级订单
- java - 如何在不同进程中使用 LocalBroadcastManager 在 Activity 和 Service 之间进行通信
- flutter - Flutter Stream Builder - 流获取 null
- html - 如何从 2 段创建堆叠图片?
- julia - 什么是 Julia 相当于 numpy 的 where 函数?
- python - 熊猫组然后申请抛出警告
- sql - 如何仅使用数据提取值但仅填充一组字段
- java - KMS 使用 Boto3 加密文件数据
- sitecore8 - 体验分析报告数据库中的 SiteNames 表 - 如何/何时填充?