5

返された JSON オブジェクトを取得し、PHP クエリが返したものを表示したいのですが、括弧を使用してインデックス値にアクセスすると、一度に 1 文字しか表示されません。基本的に、各インデックスにクエリの各行を含めたいと思っています。この特定のクエリには 2 つの結果 (ID とファイル名) があります。ID と名前の両方を JSON 配列の 1 つのインデックスに入れたいと思います。以下に表示される出力:

7 5.jpg
8 7-mini.jpg

これが私のコードです...

<script type="text/javascript">

  $(function(){
    $.ajax({                                      
      url: '<?php echo base_url().'jqueryDB/jquery';?>',   
      type:'POST',      
      dataType: 'json',    
      success: function(output_string){
                document.write(output_string[0]);
      }
    });

  }); 

現在、この表示は「7 5.jpg」ではなく「7」です。各行を 1 つのインデックスに格納するにはどうすればよいですか?

これが私のPHPファイルです:

    $userID = $this->session->userdata('id');   
    $query = $this->db->query('SELECT * FROM upload WHERE userID = '.$userID);
    $num_rows = $query->num_rows();
    $val = $query->row_array();    

    $output_string = "";  

    foreach ($query->result() as $row){
        $output_string .= $row->id;
        $output_string .= " ".$row->name."<br />";
    }

    echo json_encode($output_string);
4

3 に答える 3

8
...
$output = array();
foreach ($query->result() as $row) {
  $output[] = $row->id . ' ' . $row->name;
}
echo json_encode($output);
于 2012-08-16T20:27:22.090 に答える
3

まず、クエリの結果を文字列ではなく配列に格納します。呼び出しの結果は、json_encodeその配列を受け取り、JSON でエンコードされた文字列に変換します。

$output_array = array();

foreach($query->result() as $row) {
    $output_array[] = array( 'id' => $row->id, 'name' => $row->name );
}

echo json_encode( $output_array );

渡す配列の深さは任意であることに注意してください。 json_encode配列の構造に基づいてオブジェクトを構造化します。また、ブラウザーで結果の文字列を見て、このように多次元配列をエンコードしたときに JSON がどのように見えるかを確認することをお勧めします。

JavaScript では、文字列を解析して有用な JavaScript オブジェクトにする必要があります...

success: function(output_string){
    var obj = JSON.parse( output_string );
    // This will iterate over all of the values in the return object
    for(var i in obj) {
        document.write(obj[i].name + '<br>' + obj[i].id);
    }
}

戻りオブジェクトを別の方法で自由に構成してください。私は、質問で説明したことから外れていました。

jQuery には、MIME タイプを正しく指定すると、successコールバックへのパラメーターが自動的に JSON オブジェクトに解析される機能もあります。詳細については、jQuery のドキュメントを参照してください。

于 2012-08-16T20:28:37.517 に答える
1

@watcherの回答が出る前にこれのほとんどを書きました。おそらくあなたが望むものですが、これはすでに書かれているので、投稿することにしました。@David Fells ソリューションを次のように変更します。

$output = array();
foreach ($query->result() AS $row) {
  $output[$row->id] = array();

  foreach ($row AS $prop=>$value) {
    $output[$row->id][$prop] = $value;
  }
}

$output_json = json_encode($output);

私は通常、DB にアクセスするために PDO オブジェクトを使用し、オブジェクトではなく配列を返します。これは配列でも機能するはずですが、PHP のオブジェクトでも機能すると思います。

これは、id という名前の列を返す任意のクエリで機能するはずです。明らかに、id 部分を $id に置き換えることができます。ここで、$id は、使用したい ID 文字列/整数と同じです。

...

配列を PHP に戻したい場合 (私は特に JavaScript に精通していません)、以下を使用する必要があります。

// The TRUE returns it as an array rather than object.
$output = json_decode($output_json, TRUE);

これらの多くはかなり基本的なものであり、すでにご存知だと思います。しかし、タイトルは、この最後の部分である json_decode 部分が必要なものであり、この質問を見つけた他の誰かを助けるかもしれないと私に思わせました。

于 2012-08-16T20:47:41.397 に答える