0
我創建了一個簡單的JavaScript插件,它允許我從特定的html元素收集數據。一個頁面可以有x個元素(通常最多20個),每個元素都有自己的設置。我的問題是返回的對象不是有效的JSON格式,因爲我收到錯誤「多個JSON根元素」。在插件中處理多個JavaScript對象
我認爲原因是因爲我在插件裏面使用了每個函數,它爲每個對象創建一個新的對象,我試圖解決這個問題;結果不好。
所有的幫助將不勝感激,在此先感謝!
樣本插件
(function($) {
$.fn.collect_data = function() {
this.each(function() {
var id = "#" + ($(this).attr("id"));
// Get numerical value of id
var get_package_id = function() {
var package_id = id.replace(/[^0-9]/g, '');
return package_id;
}
// Packages is the top level container
var get_packages = function() {
var packages = {};
packages = ({[get_package_id()]: {}});
return packages;
}
// Demo information for each invidual package
var get_package_info = function() {
var info = {};
$(id).each(function() {
info = ({
value: 'Some value',
another_value: 'Another value'
});
});
return info;
}
// Demo information for each invidual package
var get_more_info = function() {
var more_info = {};
$(id).each(function() {
more_info = ({
value_more_info: 'Some value',
another_value_more_info: 'Another value'
});
});
return more_info;
}
// Combine the demo information
var result = function() {
var packages = get_packages();
var info = get_package_info();
var more_info = get_more_info();
packages[get_package_id()].info = info;
packages[get_package_id()].more_info = more_info;
return packages;
}
$("#show-data").append(JSON.stringify(result(), null, 2));
});
return this;
}
}(jQuery));
無效的結果
{
"33": {
"info": {
"value": "Some value",
"another_value": "Another value"
},
"more_info": {
"value_more_info": "Some value",
"another_value_more_info": "Another value"
}
}
}{
"74": {
"info": {
"value": "Some value",
"another_value": "Another value"
},
"more_info": {
"value_more_info": "Some value",
"another_value_more_info": "Another value"
}
}
}{
"99": {
"info": {
"value": "Some value",
"another_value": "Another value"
},
"more_info": {
"value_more_info": "Some value",
"another_value_more_info": "Another value"
}
}
}{
"124": {
"info": {
"value": "Some value",
"another_value": "Another value"
},
"more_info": {
"value_more_info": "Some value",
"another_value_more_info": "Another value"
}
}
}{
"124": {
"info": {
"value": "Some value",
"another_value": "Another value"
},
"more_info": {
"value_more_info": "Some value",
"another_value_more_info": "Another value"
}
}
}
所有的數據也許應該是頂級{}容器,而不是每個對象內部正在裏面自己添加{} 。
感謝您提前提供的所有幫助
嘿託默勒格, 插件是用於學習目的,因爲我想學習,瞭解他們是怎麼和如何使用它們。另外,想法是我可以在其他頁面上使用該插件,並使其更具多功能性。但是,您的建議非常好,非常感謝。我會看到它如何適合這種特定的需求。感謝您提供良好的建議:) – Griphon
您也可以在我的示例中重新使用該功能。只需從'.map()'中提取它併爲其命名即可。你的情況不適合插件。插件應該以某種方式操縱DOM,否則它們毫無意義。 – Tomalak
@Griphon你的主要錯誤是試圖通過字符串連接來構建JSON(將文本附加到HTML元素是同樣的事情)。不要這樣做。構建一個數據結構(對象,數組,對象數組,等等)。將它轉換爲JSON是* last *步驟,僅在通過網絡發送或將其保存在某處之前完成。 JSON應該被認爲是不可變的。不要附加到它,不要搜索和替換它,它僅用於存儲或傳輸。您想要進行的任何更改都需要解析JSON,更改數據結構以及將更改後的數據結構重新轉換爲JSON。 – Tomalak