【问题标题】:json encoded php variable into javascriptjson 将 php 变量编码为 javascript
【发布时间】:2012-09-06 19:46:19
【问题描述】:

我正在使用这样的 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 完整日历中,这里是脚本 =>

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

【问题讨论】:

  • 您正在为该 javascript 循环中的事件分配一个“对象”,而不是数组中的索引。
  • event.push({title: json_obj_birthday[i].title, start: json_obj_birthday[i].start});和 JSON.stringify(event) 用于转换为 JSON
  • @IgnacioVazquez-Abrams event = []; 如果不是多维数组?
  • 很好。看看你在循环中做了什么。

标签: php javascript json


【解决方案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 = { ... }替换存储在event 中的数组与单个javascript 对象。

【讨论】:

  • 明白为什么不起作用,但我也试过你的例子,它也不起作用
  • @DaHaKa:以什么方式不起作用?我将“事件”重命名为“事件”,因为这似乎欺骗了你之前的错误。您可能想检查一下您没有在其他地方将其称为event
【解决方案2】:

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
    });
}

【讨论】:

    【解决方案3】:

    我认为你在这里的整个方法都是错误的。以下是我的做法(此外,它不会显示警告/通知):

    <?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/服务器端。只是一个小注释,不是很重要。

    【讨论】:

    • -1 这和原来的问题完全一样。
    • @Eric 我没有回答他的全部问题。我解决了一个你聪明人没有注意到的问题。现在请给我一些时间,让我发挥我的魔力,好吗?
    • 我假设 $birthday_array 已初始化。 PHP 真的可以让你追加到未初始化为数组的变量吗!?
    • @Eric 是的,确实如此。不,它没有被初始化,否则isset() 就没有任何用处,就像你和他所做的那样。很讽刺,不是吗? ;)
    • @DaHaKa “它不起作用”是一个宽泛的声明。什么不起作用?
    【解决方案4】:
    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 中试试这个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      相关资源
      最近更新 更多