Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax JSON加载程序不工作_Javascript_Ajax_Json - Fatal编程技术网

Javascript Ajax JSON加载程序不工作

Javascript Ajax JSON加载程序不工作,javascript,ajax,json,Javascript,Ajax,Json,所以我为我的博客制作了一个JavaScript-AJAX加载程序,但它不起作用。它以前是可以工作的,但当我试图在解析器和json文件中添加几个月时,它停止了,无法加载 下面是JavaScript: firstTime = 1; function ajax_get_json_for_main_page(a){ var counter = 0; var results = document.getElementById("blogShow"); var hr = new XMLHttpR

所以我为我的博客制作了一个JavaScript-AJAX加载程序,但它不起作用。它以前是可以工作的,但当我试图在解析器和json文件中添加几个月时,它停止了,无法加载

下面是JavaScript:

firstTime = 1;
function ajax_get_json_for_main_page(a){

var counter = 0;
var results = document.getElementById("blogShow");

    var hr = new XMLHttpRequest();
    hr.open("GET", "articles/main.json", true);
    hr.setRequestHeader("Content-type", "application/json", true);
    hr.onreadystatechange = function() {
        var blog = new Array()
        var title = "";

        if(hr.readyState == 4 && hr.status == 200) {
            var data = JSON.parse(hr.responseText);
            for(var obj in data){
                for(var entry in data[obj])
                {
                    blog[counter] = "<h4>"+entry[obj].title+"</h4><p>"+entry[obj].post+"</p>"+"<hr />";
                    title += "<a onClick='willImpletmentlater(" + entry[obj] + ")" + "'>" + entry[obj].title + "</a><br /><br />"
                    counter = counter + 1;
                }

            }
            document.getElementById("big3").innerHTML = title;

            if(firstTime == 1)
            {
            results.innerHTML = blog[0]
            firstTime = 1000;
            }


            if(a == 1)
            {
                interval = setInterval(function(){blogShowAnimateInner(1, blog);}, 1);
            }
            if(a == 2)
            {
                interval = setInterval(function(){blogShowAnimateInner(2, blog);}, 1);
            }
            if(a == 3)
            {
                interval = setInterval(function(){blogShowAnimateInner(3, blog);}, 1);
            }
            if(a == 4)
            {
                interval = setInterval(function(){blogShowAnimateInner(4, blog);}, 1);  
            }


        }
    }   


hr.send(null);




}
我尝试使用JSFIDLE,但我认为他们没有加载ajax? 不管怎样,他们都没有给我任何暗示

编辑: 我知道它现在工作了,这里是建议的主要解析位

如果(hr.readyState==4&&hr.status==200){ var data=JSON.parse(hr.responseText)

var blog=[];
var title=“”;
var计数器=0;
for(数据中的var月){
var monthEntries=数据[月份];
对于(var i=0;i“+”
”; title+=“entry.title+”

计数器=计数器+1; } } 日志(blog); 控制台日志(标题); document.getElementById(“big3”).innerHTML=title; 如果(a==1) { interval=setInterval(函数(){blogShowAnimateInner(1,blog);},1); } 如果(a==2) { interval=setInterval(函数(){blogShowAnimateInner(2,blog);},1); } 如果(a==3) { interval=setInterval(函数(){blogShowAnimateInner(3,blog);},1); } 如果(a==4) { interval=setInterval(函数(){blogShowAnimateInner(4,blog);},1); } } }
编辑:
现在一切都好了

编辑:

如果我加上七月不起作用,它只对六月起作用。这有点奇怪?

根据您的json结构,可能应该是这样

for(var month in data){
        var monthEntries = data[month];
                    for(var day in monthEntries)
                    var entry = monthEntries[day];
                    {
                        blog[counter] = "<h4>"+entry[day].title+"</h4><p>"+entry[day].post+"</p>"+"<hr />";
                        title += "<a onClick='willImpletmentlater(" + entry[day] + ")" + "'>" + entry[day].title + "</a><br /><br />"
                        counter = counter + 1;
                    }

                }
for(数据中的var月){
var monthEntries=数据[月份];
用于(每月的var日)
var分录=月[日];
{
博客[计数器]=“+条目[天]。标题+”“+条目[天]。帖子+”

“+”
”; title+=“”+条目[日期]。title+“

” 计数器=计数器+1; } }
啊,我明白你的意思了。您的json响应月份对象不是数组,而是一个具有键值对的对象,当您执行var key时,对象键没有设置的检索顺序……要获得预期的顺序,您应该将json响应更改为如下内容

   {
     "june": [
        {
            "day": "17",
            "title": "Monday 17 of June 2012",
            "post": "the post taken out to save space."
        },
        {
            "day": "16", 
            "title": "Sunday 16 of June 2012",
            "post": "the post taken out to save space"
        },
        {
            "day": "15",
            "title": "Saturday 15 of June 2012",
            "post": "the post taken out to save space"
        },
        {
            "day":"14",
            "title": "Friday 14 of June 2012",
            "post": "the post taken out to save space"
        },
        {    "day": "13",
            "title": "Thursday 13 of June 2012",
            "post": "the post taken out to save space"
        },
        {    "day": "12",
            "title": "Wednesday 12 of June 2012",
            "post": "the post taken out to save space"
        }
    ]

}
我已经更新了JSFIDLE


chrome说它无法读取标题“undefined”的属性,这意味着你的解决方案对我来说是有意义的,它没有到达正确的区域?for(var monthEntries in data){var monthEntries=data[monthEntries];for(var day in monthEntries)var entry=new Array()entry[day]=monthEntries[day];alert(day){blog[counter]=“entry[day]。title+“”+entry[day]。post+“

”+“
;“title+=”+entry[day]。title+“

”counter=counter+1;}我把它改成上面的,它想出了第一个,但不是以后的。是的。我在那里搞砸了一点。entry[day]这是一个jsfiddle.o,它解决了一切都是反向运行的问题。谢谢!谢谢你的帮助,总体来说,我排除了你的新答案,但是,嗯……我想知道你是否能理解为什么我在json中再添加一个月,比如7月,它就不工作了?它应该会导致(数据中的var月)你应该每个月循环一次吗?
for(var month in data){
        var monthEntries = data[month];
                    for(var day in monthEntries)
                    var entry = monthEntries[day];
                    {
                        blog[counter] = "<h4>"+entry[day].title+"</h4><p>"+entry[day].post+"</p>"+"<hr />";
                        title += "<a onClick='willImpletmentlater(" + entry[day] + ")" + "'>" + entry[day].title + "</a><br /><br />"
                        counter = counter + 1;
                    }

                }
   {
     "june": [
        {
            "day": "17",
            "title": "Monday 17 of June 2012",
            "post": "the post taken out to save space."
        },
        {
            "day": "16", 
            "title": "Sunday 16 of June 2012",
            "post": "the post taken out to save space"
        },
        {
            "day": "15",
            "title": "Saturday 15 of June 2012",
            "post": "the post taken out to save space"
        },
        {
            "day":"14",
            "title": "Friday 14 of June 2012",
            "post": "the post taken out to save space"
        },
        {    "day": "13",
            "title": "Thursday 13 of June 2012",
            "post": "the post taken out to save space"
        },
        {    "day": "12",
            "title": "Wednesday 12 of June 2012",
            "post": "the post taken out to save space"
        }
    ]

}