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

get请求返回JSON对象无法读取items属性:Uncaught TypeError问题

问题分析与解决方案

这个问题的核心是JavaScript异步操作的执行顺序,我来帮你拆解清楚:

你使用的$.get是一个异步HTTP请求——浏览器发送请求后,不会暂停后续代码的执行来等待响应。所以当你执行console.log(returnedData.items[1].formattedUrl);时,$.get的回调函数还没被触发,returnedData仍然是你初始声明的undefined,自然就会抛出「无法读取undefined的items属性」的错误。

下面是几种可行的修复方案:


方案1:把数据处理逻辑放到回调函数内部

这是最直接的方式,确保只有当请求成功返回数据后,才去访问items属性:

<script>
var apikey = "someKey";
var SEid = "0137454dfgsdfgsdfgzxv4435099:pnqp_fvtmsy";
var query = "Flower";
var returnedData;

$.get("https://www.googleapis.com/customsearch/v1?key=" + apikey + "&cx=" + SEid + "&q=" + query, function(data){
  console.log(data);
  returnedData = data;
  // 在这里处理返回的数据,此时data已经存在
  console.log(returnedData.items[1].formattedUrl);
});
</script>

方案2:使用jQuery的Deferred对象(.done()/.fail())

$.get返回的jqXHR对象实现了Promise接口,可以用链式调用的方式处理成功/失败的情况,代码结构更清晰:

<script>
var apikey = "someKey";
var SEid = "0137454dfgsdfgsdfgzxv4435099:pnqp_fvtmsy";
var query = "Flower";

$.get("https://www.googleapis.com/customsearch/v1?key=" + apikey + "&cx=" + SEid + "&q=" + query)
  .done(function(data) {
    console.log(data);
    console.log(data.items[1].formattedUrl);
  })
  .fail(function(error) {
    console.error("请求失败,请检查API密钥或搜索ID:", error);
  });
</script>

方案3:使用async/await语法(更现代的写法)

如果你习惯同步风格的代码,可以把请求放到async函数里,用await等待请求完成:

<script>
async function fetchSearchResults() {
  var apikey = "someKey";
  var SEid = "0137454dfgsdfgsdfgzxv4435099:pnqp_fvtmsy";
  var query = "Flower";
  
  try {
    // await会等待请求完成后再继续执行
    var data = await $.get("https://www.googleapis.com/customsearch/v1?key=" + apikey + "&cx=" + SEid + "&q=" + query);
    console.log(data);
    console.log(data.items[1].formattedUrl);
  } catch (error) {
    console.error("请求出错:", error);
  }
}

// 调用async函数
fetchSearchResults();
</script>

总结一下:异步操作的核心是「不要在请求未完成时,尝试访问还未被赋值的结果变量」,必须确保数据返回后再进行后续处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:31:23