在Javascript数组中调用URL变量

时间:2015-02-09 11:12:40

标签: javascript arrays variables

我正在尝试按特定顺序将一组预定网址加载到iframe中,并为每张幻灯片添加特定时间。

其中一个幻灯片(Events.php)指向每次刷新时显示随机内容的网址。我正在尝试使用随机数附加Events.php网址,以强制每次将其加载到iframe时重新加载。

   <script>

var frames = Array(
                   getRandomUrl(), 5
                   );

var myUniqueTime = getUniqueTime;

/* Now every time you call getRandomUrl you should get back a unique url. */
function getRandomUrl()
{
    return "http://www.example.com/Events.php?=" + myUniqueTime;
}

function ChangeSrc()
{
  if (i >= len) { i = 0; } // start over
  document.getElementById('myiframe').src = frames[i++];
  return setTimeout('ChangeSrc()', (frames[i++]*1000));
}    

/* We'll make a closure here that will make sure you don't get duplicates! */
function getUniqueTime(startingFrom)
{
    startingFrom = startingFrom || (new Date().getTime());
    return function()
    {
        return startingFrom++;
    }
}

var i = 0, len = frames.length;
window.onload = ChangeSrc;


</script>

任何帮助或只是正确方向的一点将非常感谢! :)

谢谢, 标记

3 个答案:

答案 0 :(得分:0)

Javascript循环和关闭令人困惑。而只是使用一个函数:

<script>

var frames = Array(getRandomUrl(), getRandomUrl(), getRandomUrl() );
alert(frames); //remove this - just shows you that it works
var i = 0, len = frames.length;
window.onload = ChangeSrc;

function getRandomUrl()
{
    return "http://www.example.com/Events.php?=" + Math.floor(Math.random()*99999);
}

function ChangeSrc()
{
  if (i >= len) { i = 0; } // start over
  document.getElementById('myiframe').src = frames[i++];
  setTimeout('ChangeSrc()', (frames[i++]*1000));
}    

</script>

答案 1 :(得分:0)

我不太确定你是如何尝试这样做的,但是让我们尝试修改一下这段代码,看看我们是否可以让它工作。

首先,对变量声明进行一些更改。根据我收集的内容,您希望填写一个包含“&#39;值”的网址。 (对于一个事件,这只是一个字符串),你想要保存一个超时时间&#39; (也就是毫秒数)。现在,为了做到这一点,最好创建一个array object。在php中,这将是一个带有嵌套关联数组(又名array(array("a"=>"b"), array("c"=>"d"));)的数字数组。在Javascript中,您使用new Array()[]来启动数组,而不是php的array()&#39;功能&#39;。同样,如果您调用object或使用new Object();,Javascript将创建{}(或用php术语表示的关联数组)。

/* Update 3: Added this function here to get a random-isch number */
function getUniqueTime(startingFrom){
    startingFrom = startingFrom || new Date().getTime();
    return function(){
        return startingFrom++;
    }
}
var myUniqueTime = getUniqueTime();

/* Update 3: Added an easy way to get unique URLs and not confuse it with timings. */
var frames = [
    {event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000},
    {event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 10000},
    {event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000}
];

现在我们需要做的就是修改你的功能了。从帧数组中获取一个随机元素,然后让该元素返回您在键“事件”中保存的值。并且键中的那个&#39;超时&#39;。

/* Start with i negative so at the first increment it will become 0 and not 1. */
var i = -1;
function ChangeSrc(){
    /* SCheck if i+1 is bigger than frames.length, if so go to 0, otherwise increment. */
    i = i + 1 >= frames.length ? 0 : i + 1;
    var myevent = frames[i];
    console.log(myevent.event)
    setTimeout(ChangeSrc, myevent.timeout);
}

window.onload = ChangeSrc;

最后一点是setTimeout函数接受表示函数的变量,所以你只需将它传递给ChangeSrc而不调用它(所以没有())。并且它需要毫秒作为值,因此最好立即在变量中声明它们。

更新

我仍然不能100%确定你在做什么,但是如果你想让字符串每次都不同,你可以使用新的Date()。getTime()而不是随机化。它与php strtotime(&#34; now&#34;)`函数完全相同,每次调用时字符串都保证不同。但也许封闭在这里很有用,所以也许试试这个:

/* We'll make a closure here that will make sure you don't get duplicates! */
function getUniqueTime(startingFrom){
    startingFrom = startingFrom || new Date.getTime();
    return function(){
        return startingFrom++;
    }
}

var myUniqueTime = getUniqueTime();

/* Now every time you call getRandomUrl you should get back a unique url. */
function getRandomUrl(){
    return "http://www.example.com/Events.php?=" + myUniqueTime();
}

这有帮助吗?

更新了原始答案

我在原始答案中添加了随机数生成器。我已经尝试使用已经存在的代码来完成这项工作,但与我原来的答案可以轻松完成相比,它很难实现。我添加了一个代码段并更新了代码,以便更符合您的预期。

&#13;
&#13;
function getUniqueTime(startingFrom){
    startingFrom = startingFrom || new Date().getTime();
    return function(){
        return startingFrom++;
    }
}
var myUniqueTime = getUniqueTime();
var i = -1;

var frames = [
    {event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000},
    {event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 10000},
    {event: 'http://url.tld/?data=' + myUniqueTime(), timeout: 5000}
];

function ChangeSrc(){
    i = i + 1 >= frames.length ? 0 : i + 1;
    var myevent = frames[i];
    document.getElementById("console").innerHTML = document.getElementById("console").innerHTML + "<br />" + myevent.event + " (waiting " + myevent.timeout + "s)";
    setTimeout(ChangeSrc, myevent.timeout);
}
window.onload = ChangeSrc;
&#13;
<div id="console"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

查询字符串的语法是:

?field1=value1[&field2=value2...]

您已省略field1并正在使用:

?=value1

...其中value1是随机数。

这可能不足以表明将其指定为新网址。

尝试这样的事情:

return "http://www.example.com/Events.php?rnd=" + Math.floor(Math.random()*99999);