2012-08-16 162 views
2

我想要返回JSON對象並顯示PHP查詢返回的內容,但是當我使用括號訪問索引值時,它一次只顯示一個字符。基本上我希望每個索引都包含查詢中的每一行。這個特定的查詢有兩個結果(id和文件名)。我想要將ID和名稱都放入JSON數組的一個索引中。輸出顯示如下:從PHP返回JSON到數組

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',而不是 '7 5.JPG'。我怎樣才能把它存儲到一個索引?

這是我的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); 
+0

我會使用PARSE而不是dataType ...'var obj = jQuery.parseJSON(your_var);' – Zak 2012-08-16 20:30:08

回答

5
... 
$output = array(); 
foreach ($query->result() as $row) { 
    $output[] = $row->id . ' ' . $row->name; 
} 
echo json_encode($output); 
+0

感謝您的幫助! – KraigBalla 2012-08-17 16:13:07

1

首先,你要查詢的結果存儲到一個數組,的字符串。調用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 documentation

+0

這可能是更好的答案:)我的只是讓你很快到線的盡頭,看守給你的有用細節超出了。 – 2012-08-16 20:32:30

+0

@大衛我仍然會給你一個upvote :) – 2012-08-16 20:34:01

1

我在@ watcher的答案出現之前寫了大部分內容,可能是你想要的,但是這已經寫好了,所以我想我會發布它。我想修改@大衛·費爾斯的解決方案是這樣的:

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

我通常使用PDO對象來訪問我的DB和一個返回數組,而不是對象。這應該適用於數組,但我相信它也可以在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部分 - 就是你需要的,也許它會幫助別人找到這個問題。