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

React.js中使用Axios调用Flickr API无法访问内部数据

解决Flickr API响应无法访问内部属性的问题

问题出在Flickr API的响应格式上:你当前请求里用了format=json,但Flickr默认返回的是JSONP格式(响应内容被jsonFlickrApi(...)包裹),而非纯JSON。这导致axios拿到的response.data其实是字符串,不是解析后的JavaScript对象——直接访问response.data.photos会返回undefined,但浏览器控制台会自动把字符串格式的JSON展示成可展开对象,给你造成已经是对象的错觉。

两种解决方法:

方法1:让Flickr返回纯JSON(推荐)

在请求URL末尾添加&nojsoncallback=1参数,强制Flickr返回不带包裹的纯JSON,axios会自动解析成对象,之后就能正常访问内部属性:

import React from "react";
import axios from "axios";

function API(props) {
    axios
    .get("https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=8a67ea6102e401ad62ded664a49689ec&text=cat&per_page=5&size=w&format=json&nojsoncallback=1")
    .then((response) => {
        console.log(response.data.photos); // 现在可正常访问
        console.log(response.data.photos.photo); // 具体的照片数组
    });
    return true;
}

export default API;

方法2:手动处理JSONP格式的响应字符串

如果无法添加nojsoncallback=1,可以手动移除响应字符串的包裹前缀和后缀,再解析成JSON对象:

import React from "react";
import axios from "axios";

function API(props) {
    axios
    .get("https://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=8a67ea6102e401ad62ded664a49689ec&text=cat&per_page=5&size=w&format=json")
    .then((response) => {
        // 移除jsonFlickrApi(前缀和末尾的)
        const rawJson = response.data.replace(/^jsonFlickrApi\(/, "").replace(/\)$/, "");
        const data = JSON.parse(rawJson);
        console.log(data.photos); // 正常访问内部属性
    });
    return true;
}

export default API;

额外提醒

不要把Flickr API Key直接暴露在前端代码里,这会导致密钥被滥用。建议把API请求放在后端代理,前端调用自己的后端接口转发请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:35:19