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

调用NewsAPI获取新闻无输出且无报错问题求助

问题排查与修复方案

核心问题分析

  1. 国家参数不符合API要求
    NewsAPI的country参数仅接受两位ISO 3166-1 alpha-2国家代码,你使用的india是错误值,正确代码应为in(对应印度)。

  2. 缺失错误捕获机制
    当前代码没有处理请求失败的情况,即使接口返回错误、网络异常,控制台也不会输出任何提示,导致无法定位问题。

  3. API Key格式错误
    代码中&apiKey=<MyApiKey>是HTML转义后的字符,实际开发中需要替换为你在NewsAPI获取的真实密钥,且不能保留<和>包裹符。

  4. CORS与请求URL问题

  • cors-anywhere.herokuapp.com代理服务需要先获取临时访问权限,否则会被拦截;
  • 请求URL中http://newsapi.org应改为https://,避免混合内容被浏览器拦截。
  1. DOM拼接的潜在问题
    直接循环使用innerHTML +=会触发多次页面重绘,且未处理urlToImage为空的情况,可能导致页面出现无效图片占位符。

修正后的代码

JavaScript代码

function getNews() {
  // 清空之前的内容,避免重复加载
  const outputEl = document.getElementById("output");
  outputEl.innerHTML = "";

  fetch(
    "https://cors-anywhere.herokuapp.com/https://newsapi.org/v2/top-headlines?country=in&apiKey=你的真实API密钥",
    { headers: new Headers({ "X-Requested-With": "abcd" }) }
  )
    .then((response) => {
      // 先检查请求是否成功
      if (!response.ok) {
        throw new Error(`请求失败: ${response.status}`);
      }
      return response.json();
    })
    .then((data) => {
      if (!data.articles || data.articles.length === 0) {
        outputEl.innerHTML = "<p>暂无新闻内容</p>";
        return;
      }
      // 用数组拼接HTML,减少重绘次数
      const articlesHTML = data.articles.map(article => `
        <div class='article' style='padding-top:20px; clear:both;'>
          ${article.urlToImage ? `<img class='image' style='float:left; width:150px; margin-right:15px;' src='${article.urlToImage}' alt='新闻图片'>` : ""}
          <h3>${article.title}</h3>
          <span style='color:#666;'>${article.source.name}</span>
          <p>${article.description || "暂无描述"}</p>
          <a href='${article.url}' target='_blank'>查看原文</a>
        </div>
      `).join("");
      outputEl.innerHTML = articlesHTML;
    })
    .catch((error) => {
      console.error("获取新闻失败:", error);
      outputEl.innerHTML = `<p>加载失败: ${error.message}</p>`;
    });
}

HTML代码(结构无需修改)

<body>
    <button class="btn" onclick="getNews()">Get News Here.</button>
    <div id="output"></div>
    <script src="index.js"></script>
</body>

额外调试建议

  1. 若使用cors-anywhere.herokuapp.com代理服务,需先访问其官方演示页面获取临时访问权限,否则请求会被拦截;
  2. 在NewsAPI控制台确认你的API密钥是否有效,且未超出调用限额;
  3. 打开浏览器开发者工具的"Network"标签,查看请求的返回状态和响应内容,确认接口是否返回正确的新闻数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:01:09