2016-09-07 56 views
0

我正在開發一個由多個JSON訂閱源驅動的AJAX項目。我正在使用一個Feed來創建一個類別列表,用於過濾來自第二個Feed的文章。匹配來自兩個單獨的JSON訂閱源的值

我的第一進是這樣的:

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

我的第二進是這樣的:

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

的第一進是主題列表,第二進是標記一組文章通過這些主題。我能夠匹配的過濾GUIDs很好,但問題是,由於第二飼料的限制,我無法將標題「安全」拉入文章。我需要這個標題有各種各樣的原因,主要是樣式和將標題推送到頁面URL。

我試圖找到最好的方法來處理這個問題,以使其動態前進。基本上,我想根據我的第一個Feed,找到將GUID與第二個Feed中的標題關聯的最佳方式。

這裏是我是如何拉兩個提要:

進料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>'); 
     } 
    }); 
} 

希望這是有道理的,竭誠爲客戶提供更多的細節,如果要求。

回答

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和標題都很難編碼。這個客戶可能會增加更多的類別,所以我不能依靠這種方式設置變量。也許我誤解了? –

+0

演示瞭如何通過編輯來完成此操作。首先獲取所有的標題,設置你的guid2title字典。然後你可以參考文章。 – 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); 

演示:

功能storyCards(){

https://jsfiddle.net/jrdn27rf/

在這種情況下,你可以做以下

$.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

相關問題