【问题标题】:JSON url undefinedJSON url 未定义
【发布时间】:2014-02-23 16:43:46
【问题描述】:

这个网址有问题http://surfujpametno.roditelji.me/category/tv-emisija/?json=get_all_posts 我收到此错误: 未捕获的类型错误:无法读取未定义的属性“url”

但我对这个网址http://surfujpametno.roditelji.me/category/vijesti/?json=get_all_posts没有问题

这是我的代码:

function json_parser_fun() {

    var url = 'http://surfujpametno.roditelji.me/category/tv-emisija/?json=get_all_posts';
        $.ajax({
            url: url,
            type: 'GET',
            dataType: 'jsonp',
                success: function(json){
                    console.debug(json);
                    var JSONstring = JSON.stringify(json);
                    var myData = JSON.parse(JSONstring);

                    var postovi = "";

                    var brojac = 1;
                    var ima = 0;

                    for(var i=0;i<myData.posts.length;i++)
                    {
                        if(brojac %2 ==0)
                            postovi = postovi + "<a onClick=moja_funkcija('"+ myData.posts[i].url +"') class='menu_item' href='#'><div class='menu_div"+2+"'><div class='image_div'><img style='height:40px;width:40px;' src='"+ myData.posts[i].attachments[0].url +"'/></div><div class='title_div'><p style='font-size:9px'>" + myData.posts[i].date + "</p><p style='font-size:12px'>" + myData.posts[i].title + "</p></div></div></a>";
                        else
                            postovi = postovi + "<a onClick=moja_funkcija('"+ myData.posts[i].url +"') class='menu_item' href='#'><div class='menu_div'><div class='image_div'><img style='height:40px;width:40px;' src='"+ myData.posts[i].attachments[0].url +"'/></div><div class='title_div'><p style='font-size:9px'>" + myData.posts[i].date + "</p><p style='font-size:12px'>" + myData.posts[i].title + "</p></div></div></a>";
                        brojac++;
                    }

                    document.getElementById("container").innerHTML = postovi;
                },
                error: function(e) {
                    console.log(e.message);
                }
        });
}

【问题讨论】:

  • 你在哪一行得到错误?而且,到底为什么要对字符串进行字符串化然后解析?您应该能够只使用返回的 javascript 对象,因为 jQuery 已经为您解析了它。
  • myData.posts[i].url 把这个改成 myData.posts[i].attachments[0].url 还要在访问前检查附件的长度
  • 它对我有用(在小提琴上),但我收到另一个错误 TypeError: myData.posts[i].attachments[0] is undefined 所以检查你的 JSON 格式
  • posts[i].url 是未定义的添加和警告或单步执行以查看返回的数据
  • 我删除了附件[0],现在效果很好:) 谢谢

标签: javascript jquery ajax json url


【解决方案1】:

在 JSON 响应中,有时附件为空。

示例 #1:空附件替换为 urlNo_attachments_url

function json_parser_fun() {

    var url = 'http://surfujpametno.roditelji.me/category/tv-emisija/?json=get_all_posts';
    var urlNo_attachments_url = 'http://animatika.ru/netcat_files/userfiles/3/facepalm.jpg';
        $.ajax({
            url: url,
            type: 'GET',
            dataType: 'jsonp',
                success: function(json){
                    console.debug(json);
                    var JSONstring = JSON.stringify(json);
                    var myData = JSON.parse(JSONstring);

                    var postovi = "";

                    var brojac = 1;
                    var ima = 0;

                    for(var i=0;i<myData.posts.length;i++)
                    {
                        if(brojac %2 ==0)
                            postovi = postovi + "<a onClick=moja_funkcija('"+ myData.posts[i].url +"') class='menu_item' href='#'><div class='menu_div"+2+"'><div class='image_div'><img style='height:40px;width:40px;' src='"+ (myData.posts[i].attachments && myData.posts[i].attachments[0]?myData.posts[i].attachments[0].url:urlNo_attachments_url) +"'/></div><div class='title_div'><p style='font-size:9px'>" + myData.posts[i].date + "</p><p style='font-size:12px'>" + myData.posts[i].title + "</p></div></div></a>";
                        else
                            postovi = postovi + "<a onClick=moja_funkcija('"+ myData.posts[i].url +"') class='menu_item' href='#'><div class='menu_div'><div class='image_div'><img style='height:40px;width:40px;' src='"+ (myData.posts[i].attachments && myData.posts[i].attachments[0]?myData.posts[i].attachments[0].url:urlNo_attachments_url) +"'/></div><div class='title_div'><p style='font-size:9px'>" + myData.posts[i].date + "</p><p style='font-size:12px'>" + myData.posts[i].title + "</p></div></div></a>";
                        brojac++;
                    }

                    document.getElementById("container").innerHTML = postovi;
                },
                error: function(e) {
                    console.log(e.message);
                }
        });
}

示例 #2:如果附件为空 - 发布删除

function json_parser_fun() {

    var url = 'http://surfujpametno.roditelji.me/category/tv-emisija/?json=get_all_posts';
        $.ajax({
            url: url,
            type: 'GET',
            dataType: 'jsonp',
                success: function(json){
                    console.debug(json);
                    var JSONstring = JSON.stringify(json);
                    var myData = JSON.parse(JSONstring);

                    var postovi = "";

                    var brojac = 1;
                    var ima = 0;

                    for(var i=0;i<myData.posts.length;i++)
                    {
            if(myData.posts[i].attachments && myData.posts[i].attachments[0]){
                        if(brojac %2 ==0)
                            postovi = postovi + "<a onClick=moja_funkcija('"+ myData.posts[i].url +"') class='menu_item' href='#'><div class='menu_div"+2+"'><div class='image_div'><img style='height:40px;width:40px;' src='"+ myData.posts[i].attachments[0].url +"'/></div><div class='title_div'><p style='font-size:9px'>" + myData.posts[i].date + "</p><p style='font-size:12px'>" + myData.posts[i].title + "</p></div></div></a>";
                        else
                            postovi = postovi + "<a onClick=moja_funkcija('"+ myData.posts[i].url +"') class='menu_item' href='#'><div class='menu_div'><div class='image_div'><img style='height:40px;width:40px;' src='"+ myData.posts[i].attachments[0].url +"'/></div><div class='title_div'><p style='font-size:9px'>" + myData.posts[i].date + "</p><p style='font-size:12px'>" + myData.posts[i].title + "</p></div></div></a>";
                        brojac++;
            }
                    }
                    document.getElementById("container").innerHTML = postovi;
                },
                error: function(e) {
                    console.log(e.message);
                }
        });
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2021-04-17
    • 2021-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多