我需要根据没有页面重新加载的时间为某些元素添加一个类
我在页面加载时创建此数组。我有一个开始时间,一个结束时间和一个标识符。
$hrs = array(
array("2013-07-27 21:00", "2013-07-27 22:00", "one"),
array("2013-07-27 22:00", "2013-07-27 23:00", "two"),
array("2013-07-27 23:00", "2013-07-28 00:00", "three"),
);
然后我得到当前时间并从数组中获取标识符。我尝试使用setInterval
在单独的文件time.php中运行此脚本,但我无法通过$hrs
。
<ul>
<li class="one">1</li>
<li class="two">2</li>
<li class="three">3</li>
</ul>
var className = "<?php echo $class_name"; ?>
$(className).addClass("red");
运行此操作的正确方法是什么,所以我不需要刷新页面?我做了类似这样的事情,但它警告错误:
*工作代码 * ***
<script>
var hrs = '<?php echo json_encode($hrs); ?>';
//get active class from time.php
$.ajax({
url : 'http://domain.com/time.php',
type : 'POST',
data : { val : hrs },
dataType : 'json',
success : function (result) {
className = result['current_class'];
},
error : function () {
alert("error");
}
})
</script>
time.php
$hrs = json_decode($_POST['val']);
date_default_timezone_set('Europe/Bucharest');
$date = date('Y/m/d H:i');
$test = strtotime($date);
$now = date("Y-m-d H:i", $test);
$class_name = "";
foreach ($_POST['val'] as $h) {
if ($h[0] <= $now and $now <= $h[1]) {
$class_name = $h[2];fa
break;
}
}
$class = array(
'current_class' => ( $class_name ),
);
echo json_encode($class);
答案 0 :(得分:4)
如果您使用POST
type : 'POST',
您必须使用$_POST
访问它,而您正在使用$_GET
。
$_POST['val']
答案 1 :(得分:2)
替换:
var hrs = '<?php echo $hrs; ?>';
致:
var hrs = '<?php echo json_encode($hrs) ?>';
答案 2 :(得分:1)
两种语言都没有关于其他语言内部的任何线索,传递完整数组的最佳方法是将AJAX端数组编码为JSON,将其传递给PHP脚本,然后使用json_decode将其解码为PHP数组。
您也可以尝试在末尾传递带方括号的参数,并使用与php相同的名称将其解释为数组。即。
file.php?p[]=1&p[]=2&p[]=3&p[]=4&p[]=5
会导致$_GET['p']
成为包含1 - 5的5项数组。
对于帖子也是如此,如果您发布多个p[]
,则最终会以$_POST['p']
作为所有元素的数组。