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

如何修改JS与HTML代码实现点击按钮从RESTapi获取对应id的widget资源

实现思路与代码调整方案

你之前直接替换img的src属性出现链接损坏,大概率是接口地址拼接错误、接口返回格式不符合直接赋值要求,或者存在跨域、鉴权限制,你可以按以下步骤调整:


1. 先声明API基础配置

建议把接口公共前缀、资源总数这类固定参数提前声明为常量,后续维护更方便,避免硬编码出错:

// 替换成你实际的REST API前缀,比如接口地址是https://xxx.com/api/widget/1 就填前缀部分
const WIDGET_API_BASE = '你的REST API接口前缀';
// 资源总数固定为1-10共10个
const TOTAL_WIDGET_COUNT = 10;

2. 按接口返回格式选择对应实现逻辑

情况1:接口直接返回图片二进制流

如果请求接口前缀+id直接返回图片资源,直接拼接地址赋值给src即可,注意id范围是1-10,你之前的page变量是从0开始计数,需要+1对应正确的id,这也是很多人直接替换src出问题的常见原因:

const WIDGET_API_BASE = '你的REST API接口前缀';
const TOTAL_WIDGET_COUNT = 10;
let page = 0;

function next() {
  page++;
  page %= TOTAL_WIDGET_COUNT;
  // 拼接完整接口地址,page从0到9,+1对应id1到10
  const fullApiUrl = `${WIDGET_API_BASE}${page + 1}`;
  document.getElementById('myImg').src = fullApiUrl;
}

HTML部分只需要把初始的img src改成第一个资源的接口地址即可,按钮代码无需改动。


情况2:接口返回JSON格式数据

如果接口返回的是包含图片地址的JSON结构(比如{"id":1,"image_url":"xxx","title":"xxx"}),需要先发起请求拿到数据,再提取图片地址赋值:

const WIDGET_API_BASE = '你的REST API接口前缀';
const TOTAL_WIDGET_COUNT = 10;
let page = 0;

async function next() {
  page++;
  page %= TOTAL_WIDGET_COUNT;
  const requestUrl = `${WIDGET_API_BASE}${page + 1}`;
  try {
    const response = await fetch(requestUrl);
    const widgetData = await response.json();
    // 这里的image_url替换成你接口返回的图片地址对应的字段名
    document.getElementById('myImg').src = widgetData.image_url;
    document.getElementById('myImg').alt = widgetData.title || String(page+1);
  } catch (err) {
    console.error('资源加载失败:', err);
    // 可自行添加加载失败的兜底图逻辑
  }
}

3. 特殊场景适配

如果接口需要鉴权、存在跨域限制,不能直接把接口地址赋值给src,可以用fetch携带鉴权信息请求资源,转成临时blob地址再赋值:

async function next() {
  // 省略page计数逻辑
  const requestUrl = `${WIDGET_API_BASE}${page + 1}`;
  try {
    const response = await fetch(requestUrl, {
      headers: {
        // 按接口要求携带鉴权信息
        'Authorization': 'Bearer 你的用户token'
      }
    });
    const imgBlob = await response.blob();
    const tempImgUrl = URL.createObjectURL(imgBlob);
    document.getElementById('myImg').src = tempImgUrl;
  } catch (err) {
    console.error('资源加载失败:', err);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:24:00