我正在尝试创建一个在线工作的小RadioPlayer。这是我拥有的JavaScript代码
function changeLink(link)
{
/* this changes the link and plays the radio*/
var radio= document.getElementById("radio");
radio.src = link;
radio.play();
}
function jsonLoad()
{
var xmlhttp = new XMLHttpRequest();
var url = "playList.txt";
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myArr = JSON.parse(xmlhttp.responseText);
readJSON(myArr);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
function readJSON(obj)
{
var list = "<ui>";
for (var i = 0; i < obj.length ; i++)
{
list += "<li><a href='javascript:changeLink(" +"\"" + obj[i].radioLink + "\"" +");'>" + obj[i].name + "</a></li>";
}
list += "</ui>";
document.getElementById("radioLoad").innerHTML = list;
}
这也是HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title> My Radio Player</title>
<script src="Script.js"></script>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body onload="jsonLoad()">
<p>This is the link that i will change his property</p>
<audio id="radio" src="#" controls autoplay preload="auto" ></audio>
</audio>
<br>
<p id="radioLoad">
</p>
</body>
事情是,JSON文件在本地运行良好,网页显示如我所料。但是,当我将它放在服务器上时,就好像没有加载JSON文件,也没有触发其他函数(readJSON(myArr);)。看起来IF条件有问题,但我不知道是什么原因。有人能帮帮我吗?
编辑:代码似乎只能在Google Chrome中本地运行。在internet explorer中,链接是生成的,但当我点击它们时,它们不会播放广播。同样在我测试的iphone模拟器上,音频标签也不能正常工作。我也会在不同的浏览器上尝试。
EDIT2:它现在可以工作了。我设法弄清楚了这个问题。这不是代码有问题,而是我托管的服务器有问题。因此,我更改了网络主机,现在它可以工作了。你可以在这里看到:http://radioplay4all.16mb.com/
无论如何,还是要感谢您:)
发布于 2015-05-24 13:42:36
如果不亲自调试,我不能确定,但我非常确定当您尝试获取对象的.length
属性(JSON.parse()返回一个javascript对象)时,您的问题出在readJSON()
函数中,因为对象没有.length
属性。要查找对象拥有的关键点的数量,可以使用Object.keys(myArr).length
。所以在你的for循环中,obj.length
是空的,所以i
不能小于空,所以它不会执行。因此,如果您用i < Object.keys(obj).length
替换i < obj.length
,应该可以解决这个问题。
https://stackoverflow.com/questions/30423910
复制