2012-03-07 20 views
0

私はこのPHPコードを使って、多くの配列をJavaScriptから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(); 

?> 

私はこのコードを使って配列にアクセスしています。

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

IのJavaScript側の各配列の最初の要素を印刷する場合、「対象」は、その配列内の値を示さないように、それは示しています。 javascript側で配列データにアクセスする正しい方法は何ですか?

+0

もっと具体的には、JavaScriptのほかに/の代わりにjQueryを付け加えたいと思うかもしれません。 – steampowered

答えて

1

この質問への答えは、これを行う方法を教えてくれました。 Reading a json encoded array in javascript

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

あなたはどちらかecho

echo json_encode($return); 

または

echo get_events_data(); 

良く行う必要があります。その後、

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

次の行

get_events_data(); 
1

JavaScriptでは、連想配列はかなりオブジェクトです。スクリプトが正しく動作しています。 console.log()をあなたのデータで行い、それがコンソールでどのようにプリントアウトされているかを調べ、それを使ってデータにアクセスしてください。また、問題のJSONデータを投稿し、おそらくより詳細な回答を得ることができます。

+0

アソシエイティブな配列は「かなりオブジェクト」ではありません。連想配列は、javascriptのオブジェクトです。より正確。 – steampowered

0

代わりに、あなたの「似た」コードの使用この:

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; 
} 
関連する問題