繁体   English   中英

通过Ajax将数组从PHP发送到javascript

[英]Sending array from PHP to javascript through ajax

我有这个php代码,可以通过ajax将许多数组返回给javascript。

<?php

ini_set('display_errors', 1);
error_reporting(E_ALL);

function get_events_data() {

    // load SimpleXML
    $nodes = new SimpleXMLElement('my_events.xml', null, true);

    $event_id = array();
    $channel_id = array();
    $channel_name = array();
    $channel_onclick = array();
    $event_site = array();
    $event_url = array();
    $start_date = array();
    $start_time = array();
    $end_date = array();
    $end_time = array();
    $event_notes = array();

    $n = 0;
    foreach($nodes as $node) 
    {       

        $event_id[$n] = $node['id'];               
        $channel_id[$n] = $node->channel['id'];
        $channel_name[$n] = $node->channel->name;
        $channel_onclick[$n] = $node->channel->onclick;
        $event_site[$n] = $node->event_site->name;
        $event_url[$n] = $node->event_site->url;
        $start_date[$n] = $node->start_date;
        $start_time[$n] = $node->start_time;
        $end_date[$n] = $node->end_date;
        $end_time[$n] = $node->end_time;
        $event_notes[$n] = $node->notes;
        $n++;
    }

    $return['event_id'] = $event_id;               
    $return['channel_id'] = $channel_id;
    $return['channel_name'] = $channel_name;
    $return['channel_onclick'] = $channel_onclick;
    $return['event_site'] = $event_site;
    $return['event_url'] = $event_url;
    $return['start_date'] = $start_date;
    $return['start_time'] = $start_time;
    $return['end_date'] = $end_date;
    $return['end_time'] = $end_time;
    $return['event_notes'] = $event_notes;

    echo json_encode($return);

}

echo get_events_data();

?>

在javascript方面,我有这段代码可以访问数组。

    $.ajax({
        url: "get_events_data.php",
        type: "POST",
        dataType : 'json',
        data: { },
        cache: false,
        async: false,
        success: function (rdata) {
            var alert_data = 'event_id '+rdata.event_id[0]+'<br/>'+    
            'channel_id '+rdata.channel_id[0]+'<br/>'+
            'channel_name '+rdata.channel_name[0]+'<br/>'+
            'channel_onclick '+rdata.channel_onclick[0]+'<br/>'+
            'event_site '+rdata.event_site[0]+'<br/>'+
            'event_url '+rdata.event_url[0]+'<br/>'+
            'start_date '+rdata.start_date[0]+'<br/>'+
            'start_time '+rdata.start_time[0]+'<br/>'+
            'end_date '+rdata.end_date[0]+'<br/>'+
            'end_time '+rdata.end_time[0]+'<br/>'+
            'event_notes '+rdata.event_notes[0]+'<br/>';
            alert (alert_data);
        },
        error: function (request, status, error) {
            alert ("status "+status+" error "+error+"responseText "+request.responseText);
        },
});

当我在javascript端打印出每个数组的第一个元素时,它显示为“对象”未显示该数组中的值。 在javascript端访问数组数据的正确方法是什么?

在JavaScript中,关联数组几乎是一个对象。 您的脚本运行正常。 对数据进行console.log()并探索其如何在控制台中打印出来,然后使用它来访问数据。 您还可以发布有问题的JSON数据,并可能获得更详细的答案。

这个问题的答案向我展示了如何执行此操作。 在JavaScript中读取JSON编码的数组

从PHP函数返回的json编码的rdata对象可以像rdata.event_id[i]["0"]这样读取。 这是rdata中对象的示例代码。

 var event = rdata.event_id[i]["0"]+' '+
                    rdata.channel_name[i]["0"]+' '+
                    rdata.channel_onclick[i]["0"]+' '+
                    rdata.event_site[i]["0"]+' '+
                    rdata.event_url[i]["0"]+' '+
                    rdata.event_onclick[i]["0"]+' '+
                    rdata.start_date[i]["0"]+' '+
                    rdata.start_time[i]["0"]+' '+
                    rdata.end_date[i]["0"]+' '+
                    rdata.end_time[i]["0"]+' '+
                    rdata.event_notes[i]["0"]+' ';
                    $('#event_list').append(event);

使用它代替您的“相似”代码:

foreach($nodes as $node) 
{       
    $event_id[] = $node['id'];               
    $channel_id[] = $node->channel['id'];
    $channel_name[] = $node->channel->name;
    $channel_onclick[] = $node->channel->onclick;
    $event_site[] = $node->event_site->name;
    $event_url[] = $node->event_site->url;
    $start_date[] = $node->start_date;
    $start_time[] = $node->start_time;
    $end_date[] = $node->end_date;
    $end_time[] = $node->end_time;
    $event_notes[] = $node->notes;
}

你需要echo

echo json_encode($return);

要么

echo get_events_data();

更好:

echo json_encode($return);
} // end of function

然后下一行

get_events_data();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM