Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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
通过重命名src属性刷新javascript_Javascript_Jquery_Setinterval - Fatal编程技术网

通过重命名src属性刷新javascript

通过重命名src属性刷新javascript,javascript,jquery,setinterval,Javascript,Jquery,Setinterval,我想刷新下面脚本的输出。这是json吗?我需要在我的站点中添加跨域策略吗 <div id="nowplaying"> <script src="http://s4.total-streaming.com/xml.php?station=1269&get=js"></script> </div> 编辑: 这是我基于@alexn advice尝试的,但仍然没有刷新 <div id="nowplaying"> &

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

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


编辑:
这是我基于@alexn advice尝试的,但仍然没有刷新

<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>

setInterval(函数(){
$(“#正在播放脚本”).attr('src','http://s4.total-streaming.com/xml.php?station=1269&get=js');
}, 1000);

注意Firebug:
资源被解释为脚本,但使用MIME类型text/html传输。php:-1

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

要刷新内容,只需将脚本标记的
src
属性重新分配给同一url即可。可以使用在指定的时间间隔内执行此操作。类似这样的东西应该可以做到这一点,您需要为脚本标记添加一个
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);

(这是未经测试的)

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

试试这个插件(或者看看它是如何工作的):

它基本上允许您这样做:

setInterval(function () {
  $('#nowplaying-script').reload();
}, 1000);
如果您不想使用该插件,它所做的只是将当前日期附加到URI参数

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

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

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

如果他们不提供JSONPAPI,解决这个问题的一个更为黑客的方法就是编写一个充当代理的服务器端脚本。它本质上是使用substr或RegEx在服务器端加载、解析它,并返回您想要的文本,在本例中是当前播放的歌曲的名称

解决此问题的另一种方法是覆盖
文档。写入
方法,并让它将内容打印到div中,而不是像这样打印到屏幕上:

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

就我个人而言,我不会使用这个解决方案,但如果其他解决方案太复杂,您无法设置,它将起作用。记住对
文档的所有调用。在给定页面上写入
将把内容打印到
#nowplaying
元素中。如果您使用上述解决方案,您可能也应该将脚本标记移出
#nowplaying
元素。

谢谢您,alexn,您能看一下编辑吗,我也尝试了非jQ版本,但没有刷新。非常感谢,重新加载不起作用,但我有其他选项来完成任务。是的,这些网站是不同的,它们不提供json。顺便说一句,黑客的方法可能是用ajax创建一个本地页面,刷新它并清理文档。写吗?没问题!是的,我的意思是有一个本地页面(即一个PHP脚本),它从total-streaming.com URL获取内容并正确格式化,您只需执行
$(“#nowplaying”).text(…返回的内容…