1

我有一个从 php 文件返回的 json_encoded 链接数组,我想要做的是打开一个新窗口,让它一次将每个链接的 url 更改为一个并暂停大约 15 秒在移动到下一个项目之前。

如果我sleep(15)在 PHP 文件中使用,它似乎会暂停整个过程,然后立即将结果全部踢出。

在循环中使用时usingsetTimeout(function () {})似乎也无济于事。for

会有办法做到这一点,我猜我还不够熟悉。

有什么建议吗?

提前致谢!

所以如果我正确地遵循......你建议像

$.post('../php/myPHP.php',{ input: input1, value: value } )
      .done(function(r) {
           var results = $.parseJSON(r);

           var display = function() {

           if(results.length > 0) {
           show_url_in_a_new_window(results.link.pop());
           setTimeout(display, 15 * 1000);
           }
        };

        display();

        })
       .fail(function() {
       console.log('Epic Fail!');
});

而不是尝试

for (var i = 0, len = results.length; i < len; i++) { ... }

正确的?

--New Edits 我已经打开了窗口,但它只是跳转到结果中的最后一个链接?!

    $.post('../php/myPHP.php',{ input: input, values: Values } )
            .done(function(r) {
                    var results = $.parseJSON(r);

                    function windowOpener(url, name) {
                        if (typeof(popupWin) !== "object"){
                            popupWin = window.open(url, name);
                        } else {
                            if (!popupWin.closed){
                            popupWin.location.href = url;
                            }
                        }
                    }

                    $('#content').html('');

                    for (var i = 0, len = results.length; i < len; i++) {
                        console.log(results[i].link);

                        setTimeout( windowOpener(results[i].link, 'Window'), 5000); //Still only goes to the last link
                    }
            })
            .fail(function() {
                console.log('Epic Fail!');
            });

所以我仍然必须遗漏一些东西......有人吗?

4

2 回答 2

0

不要使用循环,只需使用 settimeout 并从数组中弹出一个项目。

var items = your-array-from-php;
var display = function() {
    if(items.length > 0) {
        show_url_in_a_new_window(items.pop());
        setTimeout(display, 15 * 1000);
    }
};
display();
于 2013-06-23T17:14:24.880 回答
0

您不能在服务器上使用睡眠,这只会延迟任何输出发送到客户端。相反,您应该每次都重复调用服务器以获取新 URL,或者您应该一次返回完整的 URL 列表并使用setTimeout它来打开它。您可以使用该window.open方法使用任何 URL 操作新窗口。

此外,发布代码可能对您更有帮助。

于 2013-06-23T17:15:37.940 回答