【问题标题】:$getJSON works on jsfiddle but not remotely$getJSON 适用于 jsfiddle 但不能远程
【发布时间】:2013-09-09 11:13:55
【问题描述】:

我对理解我正在尝试做的所有事情仍然很陌生,所以我需要一些帮助来了解什么是破坏我的代码。简而言之,我想获取包含照片信息的 json 结果,并将某些参数定位到我需要使用的 vars 中。

这段代码可以在 jsfiddle 中找到。它显示 Flickr 照片所有者的用户名。

$.getJSON('http://api.flickr.com/services/rest/?&method=flickr.photos.getInfo&api_key=' + apiKey + '&photo_id=' + photoId + '&format=json&jsoncallback=?',
    function(data) {
        var photoOwner = $.parseJSON(JSON.stringify(data.photo.owner.username));
        $('#photoInfo').html(photoOwner);
});

当我将此代码放回我的 JS 文件的其余部分时,它会给出错误...

Uncaught TypeError: Cannot read property 'owner' of undefined

下面是我的 JS 文件的简化版本(减去 apiKey 和 photoId 变量)。

(function () {
  var s = document.createElement('script');
  s.setAttribute('src', 'http://jquery.com/src/jquery-latest.js');
  s.onload = function () {
jQuery.noConflict();
(function ($) {

    $.getJSON('http://api.flickr.com/services/rest/?&method=flickr.photos.getInfo&api_key=' + apiKey + '&photo_id=' + photoId + '&format=json&jsoncallback=?',
        function(data) {
            var photoOwner = $.parseJSON(JSON.stringify(data.photo.owner.username));
        $('#photoInfo').html(photoOwner);
    });

}(jQuery));
};
document.getElementsByTagName('body')[0].appendChild(s);
}());

所以我知道代码可以工作......我只是不知道为什么当我将它放入我的 JS 文件时它会停止工作。任何帮助、建议、解释或更好的方法将不胜感激。

【问题讨论】:

  • $.parseJSON(JSON.stringify(... 你到底为什么要这样做? getJSON 已经将一个对象文字传递给您的回调函数。你不需要把它变成一个字符串然后再变成一个对象
  • 错误信息提示data.photo没有定义。您应该检查从 flickr API 返回的数据
  • 以常规方式包含 jQuery 并使用文档就绪处理程序可能会更好,然后只需使用该对象而不对其进行两次解析,并确保该对象实际上具有您要访问的属性。
  • @Phil 显然我不知道我在做什么并且仍在学习,因此我在这里问。但我确实知道数据在那里,因为我可以在 jsfiddle 中运行相同的代码并返回正确的数据。但是现在我知道我正在双重解析,我会考虑不这样做:P

标签: jquery json undefined getjson flickr


【解决方案1】:

我会尝试这样的......

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script>
    var apiKey = <insert api key>,
        photoId = <insert photo id>;

    jQuery(function($) {
        // do all this in a document ready handler to ensure the
        // #photoInfo element is present

        $.getJSON('http://api.flickr.com/services/rest/?jsoncallback=?', {
            method: 'flickr.photos.getInfo',
            api_key: apiKey,
            photo_id: photoId,
            format: 'json'
        }).done(function(data) {
            var photoOwner = data.photo ? data.photo.owner.username : data.message;
            $('#photoInfo').html(photoOwner);
        }).fail(function(jqXHR, textStatus, errorThrown) {
            alert('Could not connect to flickr API');
        });
    });
</script>

【讨论】:

  • 感谢回复,我去看看。你能解释一下 photoOwner 变量的结构吗?我几乎在关注其他所有内容......只是不确定我知道var中发生了什么。谢谢。
  • 我刚刚尝试了你的代码,和我的原始代码一样,它在 jsfiddle jsfiddle.net/4VuQT 中完美运行,但是当我在远程 JS 文件上运行它时抛出“找不到照片”。更多信息可能会有所帮助,我正在尝试创建一个书签,并认为跨域访问可能存在问题?我已经读过一点......但我想如果我使用的是 Flickr 的 API,那么 json 格式是否已经适应跨域?还是我需要指定一些东西来强制它为 jsonp?
  • 对那个菲尔有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多