最初に「名前」のリストを作成し、次に名前を使用して JSON ファイルを検索し、「名前」の付いたオブジェクトの下からさまざまなオブジェクトを取得します。
私が抱えている問題は、JSON ファイルに 4 つ以上のオブジェクトがある場合、スクリプトがひどく失敗することです (ブラウザーがハングして、「警告: スクリプトが応答しません」というエラーが表示されます)。
最初の 4 つのオブジェクトへのアクセスは問題ありませんが、生成されたリンクをクリックして 5 番目に移動すると、すべてがうまくいかなくなります。
JSON の例は次のとおりです…</p>
{"glass":[
{
"name":"Drink Name 1",
"ingredients":{
"liquids":["Gin", "Tonic"],
"amounts":[60, 180],
"colours":["ffffff", "51c98c"],
"garnish":["Cucumber slice"],
"ice":["cubes"]
},
"method":["Add plenty of ice into glass", "Pour gin over ice", "Top up with tonic", "Stir"],
"finished":["FAFFFE"]
},
{
"name":"Drink Name 2",
"ingredients":{
"liquids":["Gin", "Tonic"],
"amounts":[60, 180],
"colours":["ffffff", "51c98c"],
"garnish":["Cucumber slice"],
"ice":["cubes"]
},
"method":["Add plenty of ice into glass", "Pour gin over ice", "Top up with tonic", "Stir"],
"finished":["FAFFFE"]
},
{
"name":"Drink Name 3",
"ingredients":{
"liquids":["Gin", "Tonic"],
"amounts":[60, 180],
"colours":["ffffff", "51c98c"],
"garnish":["Cucumber slice"],
"ice":["cubes"]
},
"method":["Add plenty of ice into glass", "Pour gin over ice", "Top up with tonic", "Stir"],
"finished":["FAFFFE"]
},
{
"name":"Drink Name 4",
"ingredients":{
"liquids":["Gin", "Tonic"],
"amounts":[60, 180],
"colours":["ffffff", "51c98c"],
"garnish":["Cucumber slice"],
"ice":["cubes"]
},
"method":["Add plenty of ice into glass", "Pour gin over ice", "Top up with tonic", "Stir"],
"finished":["FAFFFE"]
},
{
"name":"Drink Name 5",
"ingredients":{
"liquids":["Gin", "Tonic"],
"amounts":[60, 180],
"colours":["ffffff", "51c98c"],
"garnish":["Cucumber slice"],
"ice":["cubes"]
},
"method":["Add plenty of ice into glass", "Pour gin over ice", "Top up with tonic", "Stir"],
"finished":["FAFFFE"]
}
]
}
そして、私のコード (その一部) は現在、次のようになっています…</p>
//Get the JSON list and search through it for a match to the recipe name
$.getJSON(url, function(data) {
cache:false;
for (var i=0;i<data.glass.length;i++){
var glass = data.glass[i]
//Matching the recipe to the cocktail name
if (glass.name == recipe){
// Saving the liquids array as a variable
liquidIng = (data.glass[i].ingredients.liquids)
console.log(liquidIng);
//Saving the amounts as a variable
liquidAmounts = (data.glass[i].ingredients.amounts)
var total = 0
for (var i = 0; i < liquidAmounts.length; i++) {
total += parseInt(liquidAmounts[i]);
}
//Divide the total by 100 to get onePercent
var onePercent
onePercent = total /100;
//Write and multiply the amounts by the onePercent
var outputAmounts="<div style=\"height:100%\">";
for (var i in liquidAmounts) {
outputAmounts+="<div style=\"height:" + liquidAmounts[i] / onePercent + "%; background-color:#" + glass.ingredients.colours[i] + "\">" + glass.ingredients.liquids[i] + "</div>";
}
outputAmounts+="</div>";
document.getElementById("ingredientsAmounts").innerHTML=outputAmounts;
//Write the list of ingredients
var outputIngredients="<ul>";
for (var i in liquidIng) {
outputIngredients+="<li>" + glass.ingredients.liquids[i] + "</li>";
}
outputIngredients+="</ul>";
outputIngredients+="<p>" + glass.ingredients.garnish[0] + "</p>";
document.getElementById("ingredientsList").innerHTML=outputIngredients;
//Writing the Method
var outputMethod="<ul>";
for (var i in glass.method) {
outputMethod+="<li>" + glass.method[i] + "</li>";
}
outputMethod+="</ul>";
document.getElementById("methodList").innerHTML=outputMethod;
}//Matching cocktail ends
}//Get Recipe function ends
});
スクリプトは、想定されている HTML を出力しますが、それについて 6 秒間十分に検討する前に出力しません。その後、すべてが停止します。
デバッグ メッセージであると私が理解できる最も近いものは、次の行です。</p>
var glass = data.glass[i]
私は JQuery に非常に慣れていないので、私の無知を見逃してください。本当に困惑しています。どんな助けでも大歓迎です。(また、大量の JSON コードを投稿して申し訳ありません)
ありがとう、マット