2015-12-09 42 views
1

所以我試圖從PHP發送數據到js。
我搞砸了JSON對象,數組和字符串

PHP

$balkTypes[] = $stmt->fetchAll(); 
echo json_encode($balkTypes); 

JS

balkTypesData = {}; //Outside Ajaxcall 

success: function(result){ 
    balkTypesData = result; 
    Console.log(balkTypesData); 
} 

控制檯現在

[[{"id":"3","typ":"Bas 200*600","hojd":"200","bredd":"600","rec":"","viktM":"135"},{"id":"2","typ":"Bas 240*600","hojd":"240","bredd":"600","rec":"","viktM":"160"},{"id":"5","typ":"Isol\u00e4tt 240*600","hojd":"240","bredd":"600","rec":"","viktM":"105"},{"id":"4","typ":"Kontur 240*600","hojd":"240","bredd":"600","rec":"","viktM":"105"},{"id":"6","typ":"Passbit","hojd":"0","bredd":"0","rec":"","viktM":"0"}]] 

,我倒是喜歡大海我的Json對象?!
我倒是想找個 「viktM」 爲 「典型值:巴斯200 * 600」 的所有

//Get balkType weight/m 
var searchField = "typ"; 
var searchVal = "Bas 200*600"; 
for (var i=0 ; i < balkTypesData.length ; i++){ 
    if (balkTypesData[i][searchField] == searchVal) { 
    weigth = balkTypesData[i]['viktM']; 
    console.log(weigth); 
    } 
} 

首先,它接縫,我不能在 「balkTypsData」 使用.lengt。它給了我410次點擊。必須是所有角色?

其次,我找不到如何訪問我的對象的一部分。
如果我使用:console.log(balkTypesData[i][searchField]);
我得到:「未定義」
我也試圖以刪除「[我]

所以我缺少什麼
溫柔i'm還在學習。?。

+2

你是在正確的軌道上......看看'JSON.parse()來' - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON /解析 – corn3lius

回答

1

當你從AJAX請求它​​不是JSON,只是一個字符串接收數據。

length結果你得到的是,數組中的元素的量不大的length

而且你設置$balkTypes[]這意味着你想的$balkTypes陣列中增加1項然而$stmt->fetchAll();也返回數組所以你現在有哪些不需要嵌套數組。

在你的PHP文件更改

$balkTypes[] = $stmt->fetchAll()

$balkTypes = $stmt->fetchAll()

這將確保當您獲取你的數據將是一個包含所有對象,而不是一個數組的數組包含對象數組。

然後在你的JS,而不是試圖直接從字符串讀取,使用JSON.parse()JSON字符串轉換成JS對象/整數/數組/串/布爾

例如集合

success: function(result) { 
    balkTypesData = JSON.parse(result); 
    console.log(balkTypesData); 
} 

編輯

正如Armen指出,你也可以設置在AJAX請求dataType: 'json',當AJAX請求返回它會自動做JSON.parse()所以你可以直接console.log(result);看輸出。

在console.log中,您現在應該看到嵌套結構而不是字符串。

從這裏你的循環檢查值似乎是正確的,我不會改變它,除非它告訴你有什麼不對。

文檔:JSON.parse();

+0

很好解釋。非常感謝! –

1

設置您的jQuery $就要求附加屬性dataType: 'json'

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: url, 
    data: { params }, 
    success: function(response) 
    { 
    // Your data will be already json no need to parse it 
    console.log(response); 
    } 
}); 
+0

哦,所以我可以在我的ajaxcall上添加「數據類型」...很酷。謝謝。 –

+0

是的'dataType:「json」'會認爲返回的信息是json,你將會在結果中看到json的結果 - http://api.jquery.com/jquery.ajax/ – Armen

5

看看$.parseJSON()(jQuery的)或JSON.parse()(香草):

使用jQuery

success: function(result){ 
    balkTypesData = $.parseJSON(result); 
    console.log(balkTypesData); 
    console.log(balkTypesData[i][searchField]); 
} 

沒有jQuery的

success: function(result){ 
    balkTypesData = JSON.parse(result); 
    console.log(balkTypesData); 
    console.log(balkTypesData[i][searchField]); 
} 
+0

哦,謝謝。工作得很好! –

0

您是編碼在PHP側的JSON。你不是解碼它在JS方面。

你應該看看JSON.parse()