You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jQuery AJAX解析JSON Feed并实现文章展示及相关功能

嘿,我来帮你搞定这些问题!咱们一步步拆解,从解析带指针的JSON开始,再实现两种展示方式,最后聊聊会话隐藏已读新闻的方案。

1. 解析带指针的JSON Feed

首先得明确你的JSON结构,假设它是常见的分页/指针格式(比如带新闻列表和下一页指针):

{
  "news": [/* 新闻数据数组 */],
  "nextCursor": "https://example.com/feed?cursor=abc123" // 你的指针URL/标识
}

用jQuery AJAX请求时,直接从返回的响应对象里提取对应字段就行:

$.ajax({
  url: '你的Feed地址',
  dataType: 'json',
  success: function(response) {
    // 获取核心新闻列表
    const newsList = response.news;
    // 获取指针(比如下一页的游标地址)
    const nextPointer = response.nextCursor;
    
    // 把指针存起来,方便后续加载更多(可选)
    $('#news-container').data('next-pointer', nextPointer);
    // 调用展示函数处理新闻列表
    displayTop4News(newsList);
  },
  error: function(xhr, status, error) {
    console.error('Feed加载失败:', error);
  }
});

如果你的指针是其他形式(比如游标ID),逻辑完全一致——直接从response里提取对应属性即可。

2. 两种展示选项

选项一:展示前4条新闻

用数组的slice()方法轻松截取前4项,再结合已读过滤逻辑(后面会讲):

function displayTop4News(newsList) {
  const container = $('#news-container');
  container.empty();
  
  // 先过滤已读新闻,再取前4条
  const top4 = filterUnreadNews(newsList).slice(0, 4);
  
  top4.forEach(news => {
    const newsItem = $(`<div class="news-item" data-id="${news.id}">
                          <h3>${news.title}</h3>
                          <p>${news.summary}</p>
                          <a href="${news.url}" class="read-link">阅读全文</a>
                        </div>`);
    container.append(newsItem);
  });
}

选项二:随机展示4条新闻

写个简单的随机筛选函数,用洗牌算法从数组里挑出不重复的4条:

function getRandomNews(newsList, count = 4) {
  // 先过滤已读新闻
  const unreadNews = filterUnreadNews(newsList);
  // 如果可用新闻不足4条,直接返回全部
  if (unreadNews.length <= count) return unreadNews;
  
  // 洗牌算法打乱数组,再取前count条
  const shuffled = [...unreadNews].sort(() => Math.random() - 0.5);
  return shuffled.slice(0, count);
}

// 对应的展示函数
function displayRandom4News(newsList) {
  const container = $('#news-container');
  container.empty();
  
  const random4 = getRandomNews(newsList);
  
  random4.forEach(news => {
    const newsItem = $(`<div class="news-item" data-id="${news.id}">
                          <h3>${news.title}</h3>
                          <p>${news.summary}</p>
                          <a href="${news.url}" class="read-link">阅读全文</a>
                        </div>`);
    container.append(newsItem);
  });
}
3. 会话中隐藏已读新闻

这个用前端的sessionStorage就能实现,不用后端支持!思路是:

  • 用户点击“阅读全文”时,把新闻ID存入sessionStorage
  • 每次渲染新闻前,过滤掉已存入ID的新闻

先写过滤函数:

function filterUnreadNews(newsList) {
  // 从sessionStorage获取已读ID列表,无数据则返回空数组
  const readNewsIds = JSON.parse(sessionStorage.getItem('readNewsIds')) || [];
  // 过滤掉已读新闻
  return newsList.filter(news => !readNewsIds.includes(news.id));
}

再给“阅读全文”链接绑定点击事件,记录已读状态:

// 用事件委托处理动态生成的新闻项
$('#news-container').on('click', '.read-link', function(e) {
  const newsId = $(this).closest('.news-item').data('id');
  const readNewsIds = JSON.parse(sessionStorage.getItem('readNewsIds')) || [];
  
  // 避免重复添加同一新闻ID
  if (!readNewsIds.includes(newsId)) {
    readNewsIds.push(newsId);
    sessionStorage.setItem('readNewsIds', JSON.stringify(readNewsIds));
  }
  
  // 可选:点击后隐藏当前新闻项
  // $(this).closest('.news-item').fadeOut();
});

这样用户在当前浏览器会话(标签页不关闭)里读过的新闻,下次渲染时就不会再出现了。

整合调用示例

最后加个切换按钮,让用户自由选择展示方式:

<div class="controls">
  <button id="show-top4">展示前4条</button>
  <button id="show-random">随机展示4条</button>
</div>
<div id="news-container"></div>
// 全局存储所有新闻数据
let allNews = [];

// 初始化请求Feed
$.ajax({
  url: '你的Feed地址',
  dataType: 'json',
  success: function(response) {
    allNews = response.news;
    // 默认展示前4条
    displayTop4News(allNews);
  }
});

// 绑定按钮切换事件
$('#show-top4').click(() => displayTop4News(allNews));
$('#show-random').click(() => displayRandom4News(allNews));

如果你的JSON结构和假设的不同,只需要调整response里的属性名即可,核心逻辑都是通用的~

内容的提问来源于stack exchange,提问作者JDesigns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:27:22