【问题标题】:Why sometime i can´t get data via using $.getJSON function?为什么有时我无法通过使用 $.getJSON 函数获取数据?
【发布时间】:2012-11-08 11:22:07
【问题描述】:

我现在正在使用 Youtube API,有时data is null,我不知道为什么...

function get_youtube_info(youtubeID) {
    $.getJSON("http://gdata.youtube.com/feeds/api/videos/"+youtubeID+"?v=2&prettyprint=true&alt=jsonc", function(json){
            if (json.data.accessControl.embed == "allowed") {
                //do something...
            }
    });
}

我可以使用$.ajax$.get$.post 还是什么?

【问题讨论】:

  • $.getJSON 调用是正确的,正如您所说,它有时会起作用。我不确定问题出在哪里,但如果这与 youtube api 有关,我会检查数据是否为空,如果它是重试...
  • 你是在循环调用函数吗?可能是 api 限制了您的请求
  • 如果 YouTube API 返回 null,那么您可能无能为力。您的代码是正确的,因此您每次都应该得到相同的结果,除非出现您无法控制的问题。
  • 您是否尝试过附加提琴手或其他东西以查看来自 youtube 的实际响应是什么?
  • GET http://gdata.youtube.com/feeds/api/videos/hYoQH5uYv34?v=2&prettyprint=true&alt=jsonc 304 Not Modified 246ms

标签: jquery json get null getjson


【解决方案1】:

听起来 youtube 希望您缓存您的回复,因此 304 尝试

$.ajax({
 url:'http://gdata.youtube.com/feeds/api/videos/'+youtubeID+'?v=2&prettyprint=true&alt=jsonc',
 cache:false,
 dataType:'json',
 type:'GET',
 success: function(json){
            if (json.data.accessControl.embed == "allowed") {
            //do something...
        }
        if (json.data.accessControl.embed == "denied") {
            alert("not allow to embed");
          }
    },
 error: function() {alert("not found video");}
});

【讨论】:

  • 我在dataType:'json' 之后错过了,:P
【解决方案2】:
function get_youtube_info(youtubeID) {
    $.getJSON("http://gdata.youtube.com/feeds/api/videos/"+youtubeID+"?v=2&prettyprint=true&alt=jsonc&myversion="+Math.floor(Math.random()*1000000)+"",function(json){
            if (json.data.accessControl.embed == "allowed") {
                //do something...
            }
            if (json.data.accessControl.embed == "denied") {
        alert("not allow to embed");
        }
    }).error(function(json) {
        alert("not found video");
    });
}

现在我将像这样使用,向新参数添加一些随机数以获取 json 数据,例如“允许”或“拒绝”嵌入

【讨论】:

  • 为什么?您在这里所做的所有事情都是通过向连接字符串添加随机值来绕过缓存?显式关闭缓存更有意义吗? getJSON 也与我的示例完全一样,它只是 $.ajax 的包装器?
  • 我想使用 3 个语句 1.json.data.accessControl.embed == "allowed" 2.json.data.accessControl.embed == "denied" 和 3..error(function(){});
  • 如果您的随机数返回与以前相同的值会发生什么情况,这可能会发生,然后问题再次出现,
  • 999999 个号码返回相同的号码,所以我会放弃哈哈哈:D
  • 好吧,你的选择,但上面的答案是防止缓存的破解,但你可以阻止缓存,那为什么要破解呢?
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 2016-03-17
  • 2011-01-25
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多