我將輸入字段命名爲與JSON屬性相同的名稱。所以,如果我有以下對象:
{
"foo": "",
"bar": {
"baz": ""
}
}
領域將被定義爲:
<input name="foo" class="jsonItem">
<input name="bar.baz" class="jsonItem">
和JSON成功處理程序將遞歸地填補他們:
$.getJSON("testfile.php?jsoncallback=?", function(data) {
function(root) {
var fillInputs = function(obj, prefix) {
prefix = prefix ? prefix + '.' : '';
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
var prefixOrName = prefix + prop;
var propVal = obj[prop];
if (typeof propVal === 'object') {
fillInputs(propVal, prefixOrName);
}
else {
$('input.jsonItem[name=' + prefixOrName + ']').val(propVal);
}
}
}
};
fillInputs(root, '');
});
如果你想使用這個id代替了名字,一定要在選擇器中避開點:
prefix = prefix ? prefix + '\.' : '';
...
$('input.jsonItem#' + prefixOrName).val(propVal);
另外,由於我很懶,上面的函數沒有考慮到JSON對象中的數組,但是這不應該很難添加。