2016-01-22 38 views
1

我正在做自動完成的幻想。解析JSON {「key」:「value」} JQuery

這是我的AJAX - JSON - 響應,代表"id":"name"對:

// consloe: 
Object {"14":"Mike","15":"John","23":"Drew","45":"Steve","52":"Andrew"} 

這是我從獲得:

while($row=$result->fetch_array()){ 
    $output[$row['user_id']] = $row['user']; 
} 
echo json_encode($output); 

我試着讓這個<div data-user="id">name</div>每一對。但我不能處理它..:/上述

var results = JSON.parse(data); 
$(results).each(function(key, value) { 
    $('#results').append('<div class="item">'+ value + '</div>'); 
}) 

代碼工作得很好,而我在JSON響應($output[] = $row['user'];)只有name秒。

但我需要user_id將它分配到所選選項的輸入值。

這就是我現在萊特:

console.log(results); 
$(results).each(function(key, value) { 
    console.log(key); 
    console.log(value); 
}) 

// console: 
// Object {"14":"Mike","15":"John","23":"Drew","45":"Steve","52":"Andrew"} 
// 0 
// {"14":"Mike","15":"John","23":"Drew","45":"Steve","52":"Andrew"} 

我完全糊塗了

回答

1

解決您的數據結構更加友好,每個對象具有相同的屬性名對象

陣列是更爲明智的(更常見)

while($row=$result->fetch_array()){ 
    $output[] =array('id'=>$row['user_id'], 'user'=> $row['user']); 
} 
echo json_encode($output); 

會產生:

[{"id":"14","user":"Mike"},{"id":"15","user":"John"}.......] 

現在,當您迭代數組時,您可以在每次迭代中訪問相同的屬性。通過使用這些屬性名稱也更容易閱讀。

$.each(data, function(arrayIndex, userObject){ 
    $('#results').append('<div data-user="' + userObject.id+'">'+ userObject.user + '</div>'); 
}); 

另請注意,數組更容易篩選和排序,並且有很多本地方法可以幫助您進行數組。

你也可以使屬性名稱匹配你的後端,以簡化更新

+0

在您發佈之前,我已經接受了Azim的回答,但仍然感謝您的幫助。我會用你的解決方案。我應該考慮一下,有沒有尋找有點解決方法 – RysQ

+1

以及如果這有助於您的情況更多,而且您認爲對未來的讀者會更好,切換所選答案並不合適 – charlietfl

1

循環訪問對象的所有屬性,並與idvalue創建div,然後附加到#results

var json = { "14": "Mike", "15": "John", "23": "Drew", "45": "Steve", "52": "Andrew" }; 
 

 
for (var prop in json) { 
 
    $('#results').append('<div id='+prop+'>'+json[prop]+'</div>'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="results"></div>

+0

這也適用於我:)。感謝您的快速響應 – RysQ

0

因此,這是例子讓你的key和value;

的結果檢查控制檯:的jsfiddle - https://jsfiddle.net/5hpr5bhm/

var data = {"14" :"Mike", "15" :"John", "23" :"Drew", "45" :"Steve", "52" :"Andrew"}; 

for (var key in data) { 
    console.log("User " + data[key] + " is" + key); // "User john is 24" 
}