2016-11-14 15 views
0

おはよう。私は要素のマウスホバーで、ビデオの好き嫌いに基づいてビデオ評価を計算しています。私のコードの一部は以下の通りです。Uncaught TypeError:未定義のプロパティ 'statistics'を読み取ることができません(jquery、youtube api v3)

... 
$(".item-overlay").hover(
     function() { 
      var video_id = $(this).find(".item-overlay-video-url").text(); 
      var video_api = "https://www.googleapis.com/youtube/v3/videos?part=statistics&id="+video_id+"&key="+api; 

      $.getJSON(video_api, 
       function(data) { 
        var likes  = parseInt(data['items'][0]['statistics']['likeCount']); 
        var dislikes = parseInt(data['items'][0]['statistics']['dislikeCount']); 
        var total  = likes+dislikes; 
        var percentage = Math.round((likes/total) * 100); 
        var found  = false; 

        ...do code below to display star ratings... 

私のコードは正常に動作し、星の評価は適切に表示されます。しかし、私は私のコンソールでこのエラーを取得しておいてください。 キャッチされない例外TypeError:この行で未定義

のプロパティ「統計」を読み込めません:私はこれを取得していますなぜ

var likes = parseInt(data['items'][0]['statistics']['likeCount']); 

誰も教えてもらえますエラー? 「likes」変数は、ビデオに適切な数の好き嫌いを返し、適切に計算されるため、空/空にすることはできません。もちろん、私のコードは正常に動作しています。ちょうどこのエラーを投げる。

ありがとうございました。

EDIT:ログ出力(console.log(data ['items'] [0]);)のスクリーンショットを、Luiz Eduardo de Christoのリクエストごとに追加しました。

enter image description here enter image description here

それは、私は非常に迅速に異なる要素にカーソルを合わせると、このエラーはのみ表示されることを意味をなすだろうか?同じように、別の曲をあまりにも速くホバリングしますか?おそらくコードより速く続けることができますか?遅延を追加するとこのエラーの原因になりますか?あまりにも頻繁にリクエストされた場合、getJSONがどのように動作するのでしょうか?

EDIT 2:youtubeの 'statistics'オブジェクトの返された結果のスクリーンショットを追加しました。この問題を持つかもしれない他の誰のために

enter image description here

+0

こんにちは! console.log(data ['items'] [0])の出力は何ですか? – deChristo

+0

@LuizEduardodeChristoこんにちは、私はコンソールログ出力のスクリーンショットで私のポストを更新しました。ありがとうございました – anthonyCam

+1

YouTubeはいつも 'statistics'オブジェクトを返すとは限りません。あなたが言ったように、すばやくホバリングすると、あまりにも多くの同時Ajaxリクエストがあり、いくつかは終了してデータを返しません。 データを処理する前にデータが存在するかどうかチェックしますか? – Akurn

答えて

0

、@Akurnと@LuizEduardodeChristoは、データが先に進む前に存在していることを確認するが示唆されました。 YouTubeは、あまりにも頻繁にリクエストされた場合、「統計情報」オブジェクトを返さないようです。私の場合、ユーザーが複数の曲をあまりにも早く飛び越すと、apiリクエストによって空のオブジェクトが返され、エラーが発生することがあります。

これは簡単なタイプのチェックで解決できます。ここで

typeof(data['items'][0]) != 'undefined' 

が代わりにtypeofをチェックして、私の更新されたコードです:

...some code above... 
$(".item-overlay").hover(
     function() { 
      var video_id = $(this).find(".item-overlay-video-url").text(); 
      var post_id = $(this).find(".item-post-id").text(); 
      var video_api = "https://www.googleapis.com/youtube/v3/videos?part=statistics&id="+video_id+"&key="+api; 

      $.getJSON(video_api, 
       function(data) { 
        if (typeof (data['items'][0]) != 'undefined') { 
         var likes  = parseInt(data['items'][0]['statistics']['likeCount']); 
         var dislikes = parseInt(data['items'][0]['statistics']['dislikeCount']); 
         var total  = likes+dislikes; 
         var percentage = Math.round((likes/total) * 100); 
         var found  = false; 

         ...the rest of the code follows... 

このチェックは動作しているようだしないと私はもはや、エラー・メッセージ(まだ)を取得しています。

ありがとうございます!

関連する問題