【问题标题】:Uncaught TypeError: Cannot read property 'url' of undefined - Google Image API未捕获的类型错误:无法读取未定义的属性“url” - Google Image API
【发布时间】:2014-11-14 19:51:08
【问题描述】:

我正在尝试生成 5 个随机图像(第一行来自闪烁并且工作正常)。在第二行它来自谷歌,但由于某种原因它只返回 4 并在控制台上返回一个错误,上面写着:

未捕获的类型错误:无法读取未定义的属性“url”

这是我的 HTML

 <div class="welcomeScreen">
  <form id="players">
    <p>Player 1</p>
    <input id="player1Name" placeholder="Enter player 1's name">

    <div class='player1Info clearfix'>
      <label>
        <img src="">
        <input type='radio' name='player1Avatar' class='player-1-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player1Avatar' class='player-1-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player1Avatar' class='player-1-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player1Avatar' class='player-1-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player1Avatar' class='player-1-avatar' value=''>
      </label>
    </div>

    <p>Player 2</p>
    <input id="player2Name" placeholder="Enter player 2's name">

    <div class='player2Info clearfix'>
      <label>
        <img src="">
        <input type='radio' name='player2Avatar' class='player-2-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player2Avatar' class='player-2-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player2Avatar' class='player-2-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player2Avatar' class='player-2-avatar' value=''>
      </label>

      <label>
        <img src="">
        <input type='radio' name='player2Avatar' class='player-2-avatar' value=''>
      </label>
    </div>

    <input value="Start the race!" type="submit">
    </form>
</div>

Javascript

function buildFlickrUrl(p) {
    var url = "https://farm";
    url += p.farm;
    url += ".staticflickr.com/";
    url += p.server;
    url += "/";
    url += p.id;
    url += "_";
    url += p.secret;
    url += ".jpg";

    return url;
}

$(document).ready(function() {

    var flickrUrl = "https://www.flickr.com/services/rest/?    
    method=flickr.photos.search&format=json&api_key=
    4ef070a1a5e8d5fd19faf868213c8bd0&nojsoncallback=1&text=dog

    $.get(flickrUrl, function(response) { 
        for(var i = 0; i < 5; i++) {
            var photoUrl = buildFlickrUrl(response.photos.photo[i]);
            $(".player1Info label img").eq(i).attr('src', photoUrl);
            $(".player1 img").eq(i).attr('src' , photoUrl);
            console.log(photoUrl);
        }
    });

var input="cute kitten";

$.getJSON("https://ajax.googleapis.com/ajax/services/search/images?callback=?", {
    q: input,
    v: '1.0'
}, 

感谢您的帮助!

【问题讨论】:

  • 显然data.responseData.results[i] 没有url 属性,所以你必须控制台.log data 看看你真正得到了什么。
  • 在网络标签中查找google请求,检索到的数据只带入4张图片,没有第5张图片
  • 错误表示data.responseData.results[i] 未定义
  • @PatrickEvans for(var i = 0; i &lt; 5; i++) 不返回 5 张图片吗?
  • 你的 for 循环设置为从 0 到 4 (i

标签: javascript jquery api


【解决方案1】:

在控制台设置断点,查看返回的结果。

> data.responseData.results
[Object, Object, Object, Object]

您将看到结果的长度为 4,并且您正在循环读取索引为 4。

改变

for(var i = 0; i < 5; i++) {

for(var i = 0; i < data.responseData.results.length; i++) {

【讨论】:

  • 我推荐data.responseData.results.forEach(...
  • oi62.tinypic.com/25yvedx.jpg 这就是我得到的。那么for(var i = 0; i &lt; 5; i++) 不调用 5 项?
  • 我知道这是您遇到的错误...单击错误,它会将您带到我更改的行。
  • @KenRyan 它确实调用了 5 次,循环中的第 5 次迭代是导致错误的原因
  • @epascarello 成功了!但是,由于某种原因,它仍然只需要 4 张图片,我去了ajax.googleapis.com/ajax/services/search/… 看看它是如何设置的,它似乎只需要 4 张?
【解决方案2】:

您的响应数据正常,问题出在您的for 循环中。

data.responseData.results 对象包含 4 个元素,并且您从 i 开始循环。只需将其更改为data.responseData.results.length

 for(var i = 0; i < data.responseData.results.length ; i++) {
    var googleImageUrl = data.responseData.results[i].url;
    $(".player2Info label img").eq(i).attr('src', data.responseData.results[i].url);
    console.log(googleImageUrl);
  }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2015-01-06
  • 2017-07-26
  • 2021-08-14
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多