2

この JSFiddle を参照してください: http://jsfiddle.net/cDVQP/1/

Chrome と Firefox の両方を使用している場合、Chrome では期待どおりに動作することがわかりますが、Firefox Firebug コンソールでは「TypeError: e is undefined」が表示されます。JSFiddle では、エラーは「TypeError: obj is undefined」と表示されます。

私はこのバグを探し出し、それを理解しようと何時間も費やしましたが、最終的にあきらめてここに来ました。何が原因ですか?

テストする完全なコードは次のとおりです。

<html>
<body>

  <div id="x"></div>

  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script type="text/javascript">

    $(document).ready(function(){
      getVideos('cats');
    });

    function getVideos(query){
      var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=2&q='+query+'&regionCode=us&type=video&fields=items(id)&key=AIzaSyCCOnozV0lEfnjfMTjpc4TFExAeIGJ6Fh0';
      $.ajax({
        url: url,
        success: function(data){
          appendVideos(data);
        }
      });
    }

    function appendVideos(data){
      // works here
      console.log(data);

      // but not in $.each
      $.each(data.items, function(i, item){
        $('#x').append(item.id.videoId + '<br>');
      });
    }

  </script>

</body>
</html>
4

4 に答える 4

5

データは、あなたが思っているようなオブジェクトではなく、文字列として appendVideos に渡されているようです。私はやった

for(i in data) {
    alert(i+'='+data[i]);
}

そして、それは文字列のように機能しています。

これで修正されました:

$.ajax({
    url: url,
    dataType: 'JSON',
    success: function(data){
      appendVideos(data);
    }
  });
}
于 2013-02-24T23:12:14.700 に答える
2

jQuery 1.9.1 の 622 行目にエラーが見つかりました。これは、渡したオブジェクトがundefined. 622行目は呼び出しをobj.length行い、undefinedlength と呼ばれるプロパティがないため、スローしてエラーになります。

リクエストに追加dataType: 'JSON'すると、$.ajaxこのエラーが修正されます

于 2013-02-24T23:19:36.420 に答える
1

他の答えに加えて、getJSONを使用してみませんか?

var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=2&q='+query+'&regionCode=us&type=video&fields=items(id)&key=AIzaSyCCOnozV0lEfnjfMTjpc4TFExAeIGJ6Fh0';
$.getJSON(url, function(data) 
{
    appendVideos(data);
});
于 2013-02-24T23:17:50.857 に答える
0

jQuery は、Firefox で応答を json として自動的に解析するのではなく、文字列として解釈しているようです。

成功関数を次のように変更すると、機能するはずです。

success: function(data){
    if(typeof(data) === 'string') {
        data = JSON.parse(data);
    }

    appendVideos(data);
}
于 2013-02-24T23:12:38.743 に答える