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

JavaScript调用Pexels图片API改用Request对象后返回异常如何解决

问题根因

fetch() 是异步执行的API,调用后会立即返回Promise对象,不会等待接口请求完成再往下执行。你现在代码中直接将这个Promise对象赋值给r,此时接口还没返回数据,r根本不是你拿到的响应结果,自然读不到r.photos属性。你后面控制台打印的完整响应对象,是浏览器异步更新控制台内容的特性导致的,实际代码执行到var photos = r.photos时数据还没回来。

另外补充一个小优化点:你原来的Math.random()*250得到的是小数,Pexels的page参数要求是正整数,最好用Math.floor()取整,避免请求参数异常。

修复方案

方案1:使用.then链式处理

把所有依赖接口返回数据的逻辑,都放到.then()的回调函数里,保证请求完成后才执行:

// Get PEXELs Image
var page = Math.floor(Math.random()*250);
var key = '替换为你的Pexels授权密钥';
var url = "https://api.pexels.com/v1/search?query=cute+pets&page="+page.toString()+"&per_page=1";
var headers = new Headers();
headers.append('Authorization', key);
var er = new Request(url, {headers:headers})
fetch(er)
    .then(res => res.json())
    .then(r => {
        // 所有依赖响应数据的逻辑都放在这里
        var photos = r.photos
        console.log("photos", photos)
        var raw = photos[0].src.original;
        console.log("raw", raw);
        document.getElementById("image").src=raw;
    })
    .catch(err => {
        // 增加错误捕获方便排查问题
        console.error('请求出错:', err)
    })

方案2:使用async/await语法(更简洁易读)

把逻辑封装到async函数里,用await等待fetch请求完成拿到结果再往下执行:

// 封装成async函数
async function getPexelsImage() {
    var page = Math.floor(Math.random()*250);
    var key = '替换为你的Pexels授权密钥';
    var url = "https://api.pexels.com/v1/search?query=cute+pets&page="+page.toString()+"&per_page=1";
    var headers = new Headers();
    headers.append('Authorization', key);
    var er = new Request(url, {headers:headers})
    try {
        const res = await fetch(er)
        const r = await res.json()
        var photos = r.photos
        console.log("photos", photos)
        var raw = photos[0].src.original;
        console.log("raw", raw);
        document.getElementById("image").src=raw;
    } catch (err) {
        console.error('请求出错:', err)
    }
}

// 调用函数触发请求
getPexelsImage()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:01