2015-06-11 54 views
1

我想通過使用$ .getJSON函數將通過php文件從數據庫訪問的json對象傳遞給JS。我正在使用json_encode()函數。正在檢索存儲在數據庫中的json對象。但是,我在php($ arr)中獲取的數組沒有被$ .getJSON函數接受。

請幫忙。謝謝!

示例代碼(PHP):

<?php 
    $arr = array(); 
    while($row = mysqli_fetch_array($result)){ 
     $attributes = $row['attributes']; 
     array_push($arr, $attributes); 
    } 

    $newArray = json_encode($arr); 
    echo $newArray; 
?> 

JS代碼:

var i, j; 
var dataset = []; 
for (i=0; i < 17; i++){ 
    dataset[i] = []; 
    for (j=0; j < 17; j++){ 
     dataset[i][j] = ""; 
    } 
} 
$(document).ready(function(){ 

    $.getJSON('getData.php', function(data) {       
     $.each(data, function(key, val) { 
      var x = val.posX, 
      y = val.posY; 
     }); 
    }); 
}); 

以下是當我打印$ newArray輸出。

[ 
    "{\"position\":\"6.5\",\"posX\":6,\"posY\":5,\"type\":\"wall\"}", 
    "{\"position\":\"1.2\",\"posX\":1,\"posY\":2,\"type\":\"wall\"}", 
    "{\"position\":\"3.5\",\"posX\":3,\"posY\":5,\"type\":\"bee\",\"speed\":12}", 
    "{\"position\":\"7.3\",\"posX\":7,\"posY\":3,\"type\":\"bee\",\"speed\":12}", 
    "{\"position\":\"0.0\",\"posX\":0,\"posY\":0,\"type\":\"butterfly\",\"speed\":12,\"minspeed\":3.5,\"maxspeed\":12,\"speed_change_rate\":-0.9}", 
    "{\"position\":\"4.0\",\"posX\":4,\"posY\":0,\"type\":\"butterfly\",\"speed\":12,\"minspeed\":3.5,\"maxspeed\":12,\"speed_change_rate\":-0.9}" 
] 
+0

您的'$ newArray'不包含正確的JSON – suvroc

+0

我該如何更改? –

+0

它包含適當的JSON,它只是不是很好的JSON。你有一個JSON字符串數組。每個字符串本身都是JSON文本。 – Quentin

回答

2

這裏的基本問題後使用echo stripslashes($newArray);是你在數據庫中存儲JSON而不是設計容納你所處理的數據的數據庫。

即你的數據庫表應該有一個位置,POSX等欄目

因此,當您將數據返回到您正在返回一個字符串的JSON數組,其中每個字符串是在它自己的一個JSON文本瀏覽器對。

爲了解決這個問題,你必須在你遍歷它們時解析每個字符串。

$.each(data, function(key, val) { 
     val = JSON.parse(val); 
     var x = val.posX, 

更好的方法是在返回之前解碼服務器上的每個字符串。

最好的辦法是規範化你的數據庫,這樣你就可以實際查詢數據。

-1

嘗試json_encode