通过重命名src属性来刷新javascript

时间:2011-01-04 21:29:48

标签: javascript jquery setinterval

我想刷新下面脚本的输出。这是json吗?我是否需要在我的网站中添加跨域策略?

<div id="nowplaying">
   <script src="http://s4.total-streaming.com/xml.php?station=1269&get=js"></script>
</div>


修改
这是我正在尝试的@alexn建议,但仍然没有刷新。

<div id="nowplaying">
    <script id="nowplaying-script" src="http://s4.total-streaming.com/xml.php?station=1269&get=js"></script>

    <script>
        setInterval(function () {
            $('#nowplaying-script').attr('src', 'http://s4.total-streaming.com/xml.php?station=1269&get=js');
        }, 1000);
    </script>
</div>

注意Firebug: Resource interpreted as script but transferred with MIME type text/html. xml.php:-1

2 个答案:

答案 0 :(得分:2)

不,这是简单的JavaScript。该脚本将只输出一个字符串。您不需要任何跨域策略来使用它。

要刷新内容,只需将脚本标记的src属性重新分配到同一网址即可。您可以使用setTimeout在指定的时间间隔内执行此操作。这样的事情应该这样做,您需要在脚本标记上添加id属性。以下将每隔5秒刷新一次。

setInterval(function() {
    var element = document.getElementById("nowplaying-script");
    element.setAttribute("src", "http://s4.total-streaming.com/xml.php?station=1269&get=js");
}, 5000);

(这是未经测试的)

答案 1 :(得分:1)

我倾向于这是一个缓存问题。

您尝试使用此插件(或查看其工作原理):http://plugins.jquery.com/project/reload

它基本上允许你这样做:

setInterval(function () {
  $('#nowplaying-script').reload();
}, 1000);

如果您不想使用该插件,它所做的只是将当前日期追加到URI参数。

我注意到的另一件事是你加载的脚本包含document.write。即使你设法让它重新加载,它也不会做你期望的事情。

事实上,在已加载的HTML网页上调用document.write会导致您的网页变为空白,并且只包含传递给document.write的内容。

现在我不确定您的脚本是否与您正在加载的脚本在同一主机名上运行,如果不是您需要JSONP API而不是写入页面的脚本。

如果他们不提供JSONP API,那么解决这个问题的一种更糟糕的方法就是编写一个充当代理的服务器端脚本。它本质上会加载http://s4.total-streaming.com/xml.php?station=1269&get=js,使用substr或RegEx解析服务器端并返回您想要的文本,在这种情况下是当前正在播放的歌曲的名称。

解决此问题的另一种方法是覆盖document.write方法,并将内容打印到div而不是屏幕上,如下所示:

document.write = function(songName) {
  $('#nowplaying').text(songName);
};

我个人不会使用这个解决方案,但是如果其他解决方案太复杂而无法设置,它将会起作用。请注意,在该给定页面上对document.write的所有来电都会将内容打印到您的#nowplaying元素中。如果使用上述解决方案,您可能也应该将SCRIPT标记移出#nowplaying元素。