json将php变量编码为javascript

时间:2012-09-06 19:46:19

标签: php javascript json

我正在使用php检索来自MySql的数据,如此=>

while ($birthday_row = $birthday_r->fetch_row()){
    $birthday_array[] = array(
    'title' => $birthday_row[0],
    'start' => $birthday_row[1] . "-" . $birthday_row[2]
    );
}

JavaScript的:

var json_obj_birthday = <?php if (isset($birthday_array)){echo json_encode($birthday_array);} ?>;
var json_obj_birthday_len = json_obj_birthday.length;
var d = new Date();
var event = [];
for (var i=0;i<json_obj_birthday_len;i++){ // adding manually year
    json_obj_birthday[i].start = d.getFullYear() + "-" + json_obj_birthday[i].start;
    event = {
        'title' : json_obj_birthday[i].title,
        'start' : json_obj_birthday[i].start
    };
}

在上面的JavaScript代码event数组只存储第一个数据,它只存储json_obj_birthday[0],如何将所有信息存储到event数组中?感谢

PS。我希望数组event是json编码的完整信息

更新

现在我尝试过这样的

var events = <?php if (isset($birthday_array)){echo json_encode($birthday_array);} ?>;
        var d = new Date();
        for (var i = 0; i < events.length; i++){
            events[i].start = d.getFullYear() + "-" + events[i].start;
        }

并且也没有获得欲望结果

第二次更新

我需要我想要做的事情,因为我想将这个event变量传递给jQuery完整日历,这里是script =&gt;

jQuery("#calendar").fullCalendar({ // initialize full calendar
        header: {
            left: 'prev,next today',
            center: 'title',
            right: 'month,basicWeek,basicDay'
        },
        events: [
            event
        ] // here was my fault , I must to have `events: event,`
    });

绑定你的代码之后,没有插入日历中的信息,这就是我的意思不起作用

PS。如果有人更深入地了解我在做什么以及为什么,请看看我之前提出的问题add birthday events into jQuery full calendar each year

4 个答案:

答案 0 :(得分:1)

为什么不直接将json分配给events,然后更正start条目?

var events = <?php echo isset($birthday_array) ? json_encode($birthday_array) : "[]" ?>;
var d = new Date();
for (var i = 0; i < events.length; i++){
    events[i].start = d.getFullYear() + "-" + events[i].start;
}

请注意,我在PHP中添加了一个子句,因此如果未设置$birthday_array,则javascript将收到一个空数组,而不是语法错误。


您的代码无效,因为行event = { ... } 使用单个javascript对象替换<{1}}中存储的数组

答案 1 :(得分:1)

PHP:

while ($birthday_row = $birthday_r->fetch_row()){
    $birthday_array[] = array(
    'title' => $birthday_row[0],
    'start' => $birthday_row[1] . "-" . $birthday_row[2]
    );
}

JavaScript的:

var json_obj_birthday = <?php if (isset($birthday_array)){echo json_encode($birthday_array);} ?>;
var json_obj_birthday_len = json_obj_birthday.length;
var d = new Date();
var event = [];
for (var i=0;i<json_obj_birthday_len;i++){ // adding manually year
    json_obj_birthday[i].start = d.getFullYear() + "-" + json_obj_birthday[i].start;
    event.push({
        'title' : json_obj_birthday[i].title,
        'start' : json_obj_birthday[i].start
    });
}

答案 2 :(得分:0)

var json_obj_birthday = <?php if (isset($birthday_array)){echo json_encode($birthday_array);} ?>;
var json_obj_birthday_len = json_obj_birthday.length;
var d = new Date();
var event = [];
for (var i=0;i<json_obj_birthday_len;i++){ // adding manually year
    json_obj_birthday[i].start = d.getFullYear() + "-" + json_obj_birthday[i].start;
  var  event2 = {
        'title' : json_obj_birthday[i].title,
        'start' : json_obj_birthday[i].start
    };
event.push(event2);
}

在javascript中试试这个

答案 3 :(得分:0)

我认为你的整个方法都是错误的。这是我将如何做到这一点(另外,它不会显示警告/通知):

<?php

    $birthday_array = array();

    while ($birthday_row = $birthday_r->fetch_row()){
        $birthday_array[] = array(
            'title' => $birthday_row[0],
            'start' => $birthday_row[1] . "-" . $birthday_row[2],
        );
    }

?><script type="text/javascript">

    var json_obj_birthday = <?php echo json_encode($birthday_array); ?>;
    var json_obj_birthday_len = json_obj_birthday.length;
    var d = new Date();
    var event = [];

    for (var i=0; i < json_obj_birthday_len; i++){ // adding manually year
        json_obj_birthday[i].start = d.getFullYear() + "-" + json_obj_birthday[i].start;
        event.push({
            'title' : json_obj_birthday[i].title,
            'start' : json_obj_birthday[i].start
        });
    }

</script>

我的建议是; 总是声明变量 ...永远不要只是附加/增加/等到虚构变量。

最后,虽然将一些处理卸载到客户端javascript没有任何问题,但您可能需要考虑将其放在PHP /服务器端。只是一个小小的音符,并不是真正的关键。