私は特定のhtml要素からデータを収集するための簡単なjavascriptプラグインを作成しました。ページにはx個の要素(通常最大20個)があり、各要素には独自の設定があります。私の問題は、返されたオブジェクトが有効なJSON形式ではないということです。なぜなら、 "Multiple JSON root elements"というエラーが発生しているからです。プラグイン内で複数の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"
}
}
}
すべてのデータは、おそらくトップレベル{}容器の代わりに、各オブジェクトを{}自分の内に追加される内部でなければなりません。
ご協力いただきありがとうございます。
ねえTomalak、 プラグインは、私は彼らがしているとその使用方法を理解することを学ぶしたいと思いますので、目的を学ぶためのものです。また、他のページのすべてのプラグインを使用してより多彩なものにできるというアイデアもありました。しかし、あなたの提案は非常に良いと非常に感謝しています。私はこの特定のニーズにどのように適合するかを見ていきます。良いアドバイスをくれてありがとう:) – Griphon
私の例でも関数を再利用することができます。 '.map()'からそれを抽出し、名前を付けてください。あなたの状況は、プラグインの良いユースケースではありません。プラグインは何らかの方法でDOMを操作する必要があります。そうでなければ、意味がありません。 – Tomalak
@Griphon主な間違いは、JSONを文字列の連結で構築しようとしていたことです(HTML要素にテキストを追加することは同じことです)。それをしないでください。データ構造(オブジェクト、配列、オブジェクトの配列など)を構築する。 JSONに変換するのは*最後のステップです。ネットワーク経由で送信するか、どこかに保存する直前にのみ実行されます。 JSONは不変であるとみなすべきです。追加しないでください。検索や置換はしないでください。保存や転送のためだけです。変更が必要な場合は、JSONを解析し、データ構造を変更し、変更されたデータ構造をJSONに戻す必要があります。 – Tomalak