【问题标题】:store javascript values in php variable [duplicate]将javascript值存储在php变量中[重复]
【发布时间】:2014-02-11 17:08:21
【问题描述】:

javascript:

<script src="<?= URL::site('/public/js/jstz-1.0.4.min.js'); ?>" type="text/javascript"></script>
<script>
    $(document).ready(function() {  
    var tz = jstz.determine(); // Determines the time zone of the browser client
    });
</script>

php:

<?php 
 $timezone = '<script>
    var tz = jstz.determine(); 
    document.write(tz.name());
</script>';
 ?>
<?php
echo $timezone;
$tz = new DateTimeZone($timezone);//error producing line
$message_date = new DateTime($message_date); 
$message_date->setTimeZone($tz);
$messagedate = $message_date->format('Y-m-d H:i:s');
?>

上面是获取时区的 javascript。我通过脚本获取时区并将其分配给 php 变量。如果我回显 php 变量(echo $timezone),我得到正确的时区。但如果我通过时区转换代码中的相同变量(请参阅error producing line),我收到此错误“Exception [ 0 ]: DateTimeZone::__construct(): Unknown or bad timezone (&lt;script&gt; var tz = jstz.determine(); document.write(tz.name()); &lt;/script&gt;)”。

实际上,它是将整个$timezone 变量作为字符串而不是变量。需要解决方案来解决这个问题。

谢谢

【问题讨论】:

  • 你喜欢使用 Ajax 吗?
  • @SumanBogati 如何使用 ajax 处理
  • 简单的方法是将变量写入隐藏的 dom 元素。
  • document.write?真的...不要那样做
  • @user2681579 抱歉误会了。

标签: javascript php kohana


【解决方案1】:

你无法真正解决这个问题

源文件将由 Web 服务器加载,交给 PHP,PHP 将处理所有 PHP 代码(请注意,它不处理任何 javascript 代码)。然后将结果发送到客户端的浏览器,在那里执行任何 javascript 代码。

因此,当您运行代码时,echo 起作用,因为 javascript 代码直接输出到页面,然后由客户端 Web 浏览器解释以将时区写入页面。其余的 PHP 代码不起作用,因为 $timezone 只是 HTML script 标记和一些 javascript 的字符串表示。服务器端的 PHP 不会处理或执行任何 HTML 或 javascript。充满 HTML 和 javascript 的字符串不是 DateTimeZone 构造函数的有效输入,因此您的错误。

简单地说,这两种类型的代码不能真正直接交互。您可以使用 AJAX 之类的技术将信息从 javascript 代码发送回服务器,但这将是一个单独的请求,并且与您在此处尝试的解决方案完全不同。

【讨论】:

  • 是否可以在页面加载时进行ajax调用,通过ajax调用php函数将这个时区保存在db中。
  • AJAX 的介绍/教程超出了这个问题的范围(一般来说可能是这个站点)。 Here 是 W3C 关于 AJAX 工作原理以及如何开始使用该技术的一个很好的参考。
  • 是的,可以使用 javascript 获取时区并将其发送回服务器以放入数据库。这个问题也可能有帮助:stackoverflow.com/questions/1905397/how-to-get-clients-timezone
猜你喜欢
  • 2011-07-15
  • 2014-03-14
  • 2021-06-22
  • 2019-08-23
  • 2013-09-03
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多