Javascript 有人能帮我理解AJAX(JSON)问题吗?

Javascript 有人能帮我理解AJAX(JSON)问题吗?,javascript,ajax,json,jquery,Javascript,Ajax,Json,Jquery,我的目标是用ActionScript3视频播放器创建一个个人应用程序。我希望能够在浏览器中保存单个.swf文件,并通过AJAX将.swf url传递给我的视频。我选择使用JSON作为我的数据 我是JSON新手,遇到了麻烦。这看起来非常简单,但起初我甚至无法将本地托管的.json文件放入我的webapp。当我尝试用XML做这件事时,它正在工作。经过一系列的故障排除,它现在实际上得到了我的XMLHttpRequest 我试图尽可能地保持向后兼容性,因此我使用json2.js库来保护这个概念 我当前的

我的目标是用ActionScript3视频播放器创建一个个人应用程序。我希望能够在浏览器中保存单个.swf文件,并通过AJAX将.swf url传递给我的视频。我选择使用JSON作为我的数据

我是JSON新手,遇到了麻烦。这看起来非常简单,但起初我甚至无法将本地托管的.json文件放入我的webapp。当我尝试用XML做这件事时,它正在工作。经过一系列的故障排除,它现在实际上得到了我的XMLHttpRequest

我试图尽可能地保持向后兼容性,因此我使用json2.js库来保护这个概念

我当前的问题是无法解析XMLHTTPRequest。老实说,我甚至不确定我所做的是否正确,因为我到处寻找示例,它们几乎都指向将JSON写入实际网页的解决方案

我的外部JSON文件:test.JSON

{ "video":"test.f4v", "thumb":"test.jpg", "title":"The test", "caption":"TEST TEST TEST TEST TEST", "minutes":01, "seconds":43 }
我肯定JSON文件是有效的

以下是我的html/javascript:

<script type="text/javascript" src="js/json2.js"></script>
    <script type="text/javascript">
    window.onload = initAll();

    function initAll(){
        var jsonData = {};
        var xhr = false;

        if(window.XMLHttpRequest){ //Chrome, Firefox, Opera, Safari, IE7+
            xhr = new XMLHttpRequest();
        } else if(window.ActiveXObject){ //IE5 + IE6
            try{
                xhr = new ActiveXObject("Msxml2.XMLHTTP");
            } catch(e){
                try{
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                } catch(e) {
                    alert("Could not make XMLHttpRequest");
                }
            }
        }

        if(xhr){
            xhr.open("GET", "js/ajax/test.json", true);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200){
                    try{
                        jsonData = JSON.parse(xhr.responseText);
                        alert(jsonData.title);
                        document.getElementById("vidtitle").innerHTML = xhr.responseText.title;
                        document.getElementById("vidcaption").innerHTML = jsonData.caption;
                    } catch(e){
                        alert("Unable to parse jsonData.");
                    }
                }
            };
            xhr.send(null);
        }
    }
</script>   
</head>
<body><div class="vidcontent">
<h2 id="vidtitle"></h2>
<p id="vidcaption"></p>

window.onload=initAll();
函数initAll(){
var jsonData={};
var xhr=false;
if(window.XMLHttpRequest){//Chrome、Firefox、Opera、Safari、IE7+
xhr=newXMLHttpRequest();
}如果(window.ActiveXObject){//IE5+IE6
试一试{
xhr=新的ActiveXObject(“Msxml2.XMLHTTP”);
}捕获(e){
试一试{
xhr=新的ActiveXObject(“Microsoft.XMLHTTP”);
}捕获(e){
警报(“无法进行XMLHttpRequest”);
}
}
}
if(xhr){
open(“GET”,“js/ajax/test.json”,true);
xhr.onreadystatechange=函数(){
如果(xhr.readyState==4&&xhr.status==200){
试一试{
jsonData=JSON.parse(xhr.responseText);
警报(jsonData.title);
document.getElementById(“vidtitle”).innerHTML=xhr.responseText.title;
document.getElementById(“vidcaption”).innerHTML=jsonData.caption;
}捕获(e){
警报(“无法解析jsonData”);
}
}
};
xhr.send(空);
}
}

我在我的服务器上本地执行此操作,但我已将文件上载到我的web主机,但仍然遇到相同的问题

Firebug告诉我它有数据,我甚至可以通过控制台读取数据。现在,代码可以在Firefox中使用,但不能在Chrome或IE8中使用(当我将其置于兼容模式时,IE8偶尔可以使用,但并不总是您的JSON无效:


显然,数字中不允许使用前导0。

Oh-wow。我之前用:验证了它,它发现我缺少了一个逗号,但是,它没有发现。令人震惊的是,它修复了Chrome和IE8中的问题。它在IE8中以兼容模式启动页面,如果我关闭并重新打开它,它将不再工作。但是谁会这样做呢这样做?@TomStevens:你也可以看一下规格说明:(最后一个图表)。如果一个数字以
0
开头,后面必须跟一个小数点。@FelixKling:谢谢你指出这一点,我看这些图表时非常困惑。我想我现在真的明白了。