1

我需要根据时间为某些元素添加一个类,而无需重新加载页面

我在页面加载时创建这个数组。我有一个开始时间、一个结束时间和一个标识符。

$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"),
);

然后我得到当前时间并从数组中获取标识符。我尝试在单独的文件 time.php 中运行此脚本,setInterval但我无法通过$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>

时间.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);
4

3 回答 3

4

如果您使用POST

type : 'POST',

您必须使用 访问它$_POST,您正在使用$_GET.

$_POST['val']
于 2013-07-31T07:16:21.000 回答
2

代替:

var hrs = '<?php echo $hrs; ?>';  

到:

var hrs = '<?php echo json_encode($hrs) ?>';
于 2013-07-31T07:23:39.307 回答
1

两种语言都没有关于另一种语言的内部结构的任何线索,传递完整数组的最佳选择是将 AJAX 端数组编码为 JSON,将其传递给 PHP 脚本,然后使用json_decode将其解码为 PHP 数组。

您也可以尝试在末尾使用方括号传递参数,与 php 将其解释为数组的名称相同。IE

file.php?p[]=1&p[]=2&p[]=3&p[]=4&p[]=5

将导致$_GET['p']成为一个包含 1 - 5 的 5 项数组。

post 也是如此,如果你发布多个p[]'s,你最终会得到$_POST['p']一个包含所有元素的数组。

于 2013-07-31T07:20:33.937 回答