【问题标题】:Refreshing Dynamic Images Using jQuery使用 jQuery 刷新动态图像
【发布时间】:2013-06-20 15:43:21
【问题描述】:

我正在尝试创建一个 twitch.tv 流列表,该列表每 60 秒提取一次在线/离线状态,并根据该响应返回一个图像。我用来提取此信息并返回图像的 php 代码如下:

<?php
    header('content-type: image/png');

    $stream = $_GET['stream'];

    $json_file = @file_get_contents("http://api.justin.tv/api/stream/list.json?channel={$stream}");
    $json_array = json_decode($json_file, true);

    if (strtolower($json_array[0]['name']) == strtolower("live_user_{$stream}")) {
        echo file_get_contents("online.png");
    }else{
        echo file_get_contents("offline.png");
    }
?>

这部分工作正常。我这样称呼这段代码(image.php):

<img src="image.php?stream=nameofstreamgoeshere" />

这一切都有效,但它不是现场的。我已经尝试了几件事来让它刷新并确定 jQuery 可能是最好的选择。我认为我需要做的是发送标题信息的某种组合,强制浏览器不缓存图像,并可能将其放入 jQuery 每 60 秒刷新一次的 div 中,但这是我遇到砖墙的地方。关于如何做到这一点的任何建议?我对 jQuery 比较陌生,在这里摸索了一下,所以任何帮助都将不胜感激。

我为避免缓存图像而发现的许多潜在解决方案包括在图像 url 上附加日期或时间等内容,但由于这已经是一个动态图像 url,我不知道如何使其工作。

提前感谢您的帮助。

【问题讨论】:

  • 您是否从 justin.tv 服务中得到正确的响应?那么,缓存的是你的文件吗?
  • 是的!我从 justin.tv 得到了很好的回应——他们允许每 60 秒提取一次状态信息。我相信缓存的是我的 online.png 或 offline.png 文件。

标签: php jquery image dynamic-image-generation


【解决方案1】:

好的,所以回答我自己的问题可能很奇怪,但是我找到了解决我最初提出的问题的部分

我想到了使用 jquery 来自动刷新一个 div 保持抽搐状态如下:

首先,在我的文档标题中调用 jquery:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js">

然后,在文件正文部分的底部:

<script>
$.ajaxSetup ({
    // Disable caching of AJAX responses */
    cache: false
});

var auto_refresh = setInterval(
function()
{
$('#twitchStatus').fadeOut(0).load('reload.php').fadeIn(0);
}, 60000);
</script>

最后,围绕其中包含图像的代码:

<div id="twitchStatus">
nameofstreamgoeshere is <img style="margin-bottom: 0px;" alt="" src="image.php?stream=nameofstreamgoeshere" />
</div>

所以我目前的问题?它在 chrome 中完美运行,但在 IE 或 Firefox 中却不行……有人有线索吗?我认为它可能正在缓存页面 - 因为它似乎根本没有刷新,因此脚本的第一部分位于正文的末尾,但这并没有做任何事情。再次感谢任何帮助。

【讨论】:

  • 我在两者上都将fadeOut/fadeIn 变量更改为“slow”,以查看它是否正确刷新并且它实际上在IE/Firefox 中刷新,但仍未更新图像。我仍然认为这是一个缓存问题...我尝试将反缓存头信息放入 image.php 文件中,但无济于事。还在工作...
  • 尝试用时间戳调用你的 reload.php,比如.load("reload.php?d=123456"),如果这不起作用,请检查关于标题的 PHP 文档,应该有一个你可以在你的脚本中使用,即允许您告诉浏览器不要缓存内容。
  • @Leite - 感谢您的建议,但我仍然无法使用 IE。我已经添加了一堆 PHP 标头信息以防止在 image.php 文件和 reload.php 文件中缓存,并为 .load 函数添加了时间戳,如您所述。我开始怀疑它是否根本不是缓存问题......还有什么可以阻止这个脚本工作的吗?
  • $.ajax 中有一个cache 选项,默认为true。由于您使用的是$.load,也许您可​​以检查$.ajaxPrefilter (api.jquery.com/jQuery.ajaxPrefilter),看看您是否可以在那里更改该选项,可能是这样。
猜你喜欢
  • 2011-09-24
  • 2012-06-10
  • 2013-08-19
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 1970-01-01
相关资源
最近更新 更多