javascript - 多组间隔脚本

标签 javascript

我有一个代码可以在我的网站上放置两个摄像头:

$(document).ready(function(){
    var m;
    var index;
    var IP;
    var port;
    var name;
    var user;
    var password;
    var image_old;
    var image_new;
    var cameraFeed;
    var topImage;
    var urls = [];

        $.ajax({
            type: "GET",
            url: "json.htm?type=cameras",
            dataType: "JSON",
            async : false,
            success: function(data) {

                for(m=0; m<=1; m++){

                    index = data.result[m].idx;
                    IP = data.result[m].Address;
                    port = data.result[m].Port;
                    name = data.result[m].Name;
                    user = data.result[m].Username;
                    password = data.result[m].Password;
                    image_old = data.result[m].ImageURL;
                    image_new = image_old.replace("#USERNAME", user).replace("#PASSWORD", password);

                    cameraFeed = "http://" + IP + ":" + port + "/" + image_new;
                    alert(cameraFeed + m);
                    urls.push(cameraFeed);




                }
                setInterval(function() {
                    var d = Date.now();
                    $.each(urls, function(i, url) {
                        $('#topImage' + i).attr('src', url + "&timestamp=" + d);
                    });
                }, 100);
            },
            error: function(data) {
                alert("Error")
            }
        });


});

和 html 代码:

<img id="topImage0" width="640px">
<img id="topImage1" width="640px">

我无法创建脚本来使 setinterval 对两个 imgs 都起作用。它只适用于其中之一。有什么建议如何使其发挥作用吗? 设置间隔仅适用于一张图片。

最佳答案

让您了解如何构建应用程序代码:

  • 从服务器获取数据
  • 根据数据创建网址
  • 使用这些网址每 X 毫秒更新一次图像

在代码中:

$.ajax({...}).done(function(data) { // get data from server
    // create URLs
    var urls = [];
    for (var m = 0; m < 2; m++) { // why not iterate over data.results?
        var cameraFeed;
        // build cameraFeed ...
        urls.push(cameraFeed);
    }

    // Update images
    setInterval(function() {
        var d = Date.now();
        $.each(urls, function(i, url) {
            $('#topImage' + i).attr('src', url + "&timestamp=" + d);
        });
    }, 100);
});

当然,这仍然可以得到批准,但这应该会为您指明正确的方向。特别注意,没有必要为每个图像设置 setInterval。只需让一个时间间隔更新所有图像即可。

尤其是 for 循环可以得到批准。我不知道 data.results 有多少个结果,并且如果您只想获得前两个结果,但这是 Array#map 的绝佳用例。 :

var urls = data.results.map(function(result) {
    // ...
    return cameraFeed;
});

关于javascript - 多组间隔脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28858774/

相关文章:

javascript if 语句不起作用

javascript - EACCES : permission denied, 打开 '/home/site/wwwroot/node_modules/.cache/.eslintcache'

javascript - Aurelia 使用值转换器对打印值进行节流

javascript - 如何在输入字段 keyup 事件上添加等待计时器?

javascript - 在 sequelize.js 中使用构建方法时是否需要验证、清理或转义数据

javascript - 检查cookie是否仍然有效

javascript - 为什么 ~5 === -6 在 JavaScript 中?

Javascript 用字符串替换 onKeyUp 事件

javascript - 将数组从 jquery 发送到 ASP.NET 并使用它

javascript - 如何从一个数组中获取数据,随机选取一半而不选择同一张卡两次,然后将它们移动到另一个数组?