2016-09-07 14 views
0

私は、複数のJSONフィードで駆動されるAJAXプロジェクトで作業しています。私は1つのフィードを使用してカテゴリのリストを作成しています。カテゴリのリストは、2番目のフィードから入ってくる記事をフィルタリングします。2つの別々のJSONフィードの値の一致

私の最初のフィードは次のようになります。

value": [ 
    { 
     "Id": "30b94b5b-06ab-63fa-8375-ff00000b3273", 
     "Title": "Test article", 
     "Body": "Test content", 
     "topics": [ 
      "1ca44b5b-06ab-63fa-8375-ff00000b3273" 
     ], 
    }, ... 
] 

最初のフィードはトピックのリストである、第二供給がタグ付けされた記事の集合である:

"value": [ 
    { 
     "Id": "1ca44b5b-06ab-63fa-8375-ff00000b3273", 
     "Title": "Safety", 
    }, ... 
] 

私の第二のフィードは、このようになりますそれらのトピックによって。私はきれいにフィルタリングするためのGUIDに一致することができますが、問題は、2番目のフィードの制限のために私は記事にタイトルの "安全性"を引き出すことができないということです。私は、主にスタイリングと、ページのURLにタイトルをプッシュするためのさまざまな理由で、このタイトルが必要です。

私はこれをダイナミックにするために、これにアプローチする最善の方法を見つけようとしています。基本的には、最初のフィードに基づいて、2番目のフィードのタイトルにGUIDを関連付ける最良の方法を探したいと思います。

フィード1:

$('.category-filters').each(function(){ 
    var $this = $(this); 

    $.ajax({ 
     method:"GET", 
     url: '/api/stories/flat-taxa?$filter=TaxonomyId%20eq%20dca84b5b-06ab-63fa-8375-ff00000b3273', 
     data: { format:'json'}, 
     context:$this 
    }).success(function(data){ 

     var category = data.value; 
     var filter = []; 

     for (i = 0; i < category.length; i++) { 
      $this.append('<li><input type="checkbox" id="' + category[i].Id + '"><label for="' + category[i].Id + '">' + category[i].Title + '</label></li>'); 
     } 
    }); 
}); 

フィード2:

function storyCards(){ 

    $.ajax({ 
     method:"GET", 
     url: url, 
     data: { format:'json' }, 
     context:$('.story-cards') 
    }).success(function(data){ 
     var story = data.value; 

     for (i = 0; i < story.length; i++) { 
      $('.story-cards').append('<li class="item card-item"><div class="card"><div class="content"><h2>' + story[i].Title + '</h2>' + story[i].Summary + '</div><div class="card-footer"><a class="button" href="' + story[i].UrlName + '">' + story[i].ButtonText + '</a></div></div></li>'); 
     } 
    }); 
} 

うまくいけば、これは理にかなって、要求された場合にはより多くの詳細を提供して幸せここ

は、私は2つのフィードを引っ張ってる方法です。

答えて

1

GUIDとタイトルを一致させることができる共有辞書のような感じです。

//dynamically set the titles 
var guid2title = {} 
//titles is the array of titles/GUID in your post 
for (var i = 0; i < titles.length; i++){ 
    guid2title[titles[i]["Id"]] = titles[i]["Title"]; 
} 

//items is the json array of articles in your post 
for (var i = 0; i < items.length; i++){ 
    items[i].titles = []; //used later to save to the object 
    for (var j = 0; j < items[i].topics.length; j++){ 
     var GUID = items[i].topics[j]; 
     var title = guid2title[GUID]; 

     //attach it to your item for later use 
     items[i].titles.push(title); 

    } 

}  
+0

良いアプローチのようですが、確かに私が思いついたものです。私の問題はこのシナリオではGUIDとタイトルの両方が難しいコード化される。このクライアントは今後より多くのカテゴリを追加するかもしれないので、私はこのようにvarsを設定することに頼ることはできません。多分私は誤解しているのだろうか? –

+0

編集時にこれを行う方法を示しました。あなたのguid2title dictを設定して、最初にすべてのタイトルを取得してください。その後、記事でそれを参照することができます。 – Blakedallen

+0

これは本当に効率的な夢のように機能しました。ありがとうございました! –

1

いくつかのループを実行してくださいなどの記事に話題のタイトルを追加します。

var obj1 = { 
    "value": [{ 
    "Id": "1ca44b5b-06ab-63fa-8375-ff00000b3273", 
    "Title": "Safety", 
    }] 
}; 

var obj2 = { 
    "value": [{ 
    "Id": "30b94b5b-06ab-63fa-8375-ff00000b3273", 
    "Title": "Test article", 
    "Body": "Test content", 
    "topics": [ 
     "1ca44b5b-06ab-63fa-8375-ff00000b3273" 
    ], 
    }] 
}; 

$.each(obj2.value, function(i, v) { 
    $.each(obj1.value, function(index, val) { 
    if (v.topics[0] == val.Id) { 
     obj2.value[i]['TopicName'] = val.Title; 

    } 
    }); 
}); 
console.log(obj2); 

デモ:あなたは次の操作を行うことができ、この場合https://jsfiddle.net/jrdn27rf/

関数storyCards(){

$.ajax({ 
    method:"GET", 
    url: url, 
    data: { format:'json' }, 
    context:$('.story-cards') 
}).success(function(data){ 
    var story = data.value; 

    for (i = 0; i < story.length; i++) { 
     var categoryTitle = $('label[for="'+story[i].topics[0]+']"').text(); 
     $('.story-cards').append('<li class="item card-item"><div class="card"><div class="content"><h2>' + story[i].Title + '</h2>' + story[i].Summary + '</div><p>'+categoryTitle +'</p><div class="card-footer"><a class="button" href="' + story[i].UrlName + '">' + story[i].ButtonText + '</a></div></div></li>'); 
    } 
}); 

}

+0

私はこのアプローチが本当に好きですが、私のソリューションにどのように適用するかはわかりません。私が使用しているAJAXで私の質問を更新しました。 –

+0

私の更新された答えを見てください。複数のカテゴリを持っていてループをしてカテゴリタイトルを取得する場合 – madalinivascu