在Javascript数组中调用URL变量

在Javascript数组中调用URL变量,javascript,arrays,variables,Javascript,Arrays,Variables,我试图以特定的顺序将一组预先确定的URL加载到iframe中,每个幻灯片都有特定的时间 其中一个slides Events.php指向一个URL,该URL在每次刷新时显示随机内容。我试图在Events.php URL后面附加一个随机数,以强制它在每次加载到iframe时重新加载 <script> var frames = Array( getRandomUrl(), 5 ); var myUniqu

我试图以特定的顺序将一组预先确定的URL加载到iframe中,每个幻灯片都有特定的时间

其中一个slides Events.php指向一个URL,该URL在每次刷新时显示随机内容。我试图在Events.php URL后面附加一个随机数,以强制它在每次加载到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>
我们将非常感谢您的任何帮助或正确方向上的一点帮助!:

谢谢,
标记。

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>

我不太清楚你是如何做到这一点的,但让我们试着修改一下这段代码,看看我们是否可以让它工作

首先,对变量声明进行一些更改。根据我收集的信息,您希望用一个“值”来完成一个URL,该值只是一个事件的字符串,并且您希望保存一个“超时时间”,该时间也是毫秒数。现在,为了做到这一点,最好创建一个对象数组。在php中,这将是一个带有嵌套关联数组的数字数组,也称为ArrayArray=>b,arrayc=>d;。在Javascript中,您使用新数组或[]来启动数组,而不是php的数组“函数”。类似地,如果您调用任何一个新对象,Javascript将用php术语创建一个对象或关联数组;或者使用{}

现在我们需要做的就是修改一下你的函数。从帧数组中获取一个随机元素,然后要求该元素返回保存在键“event”和键“timeout”中的值

/* 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%确定您正在做什么,但是如果您希望字符串每次都不同,您可以使用new Date.getTime而不是随机化。它与php strottimenow`函数完全相同,并且保证每次调用它时字符串都是不同的。但是,也许闭包在这里很有用,所以不妨尝试一下:

/* 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();
}
那有用吗

更新原始答案 我在原始答案中添加了随机数生成器。我已经试着用已经存在的代码来完成这项工作,但是与我原来的答案相比,这项工作非常困难。我添加了一个代码片段,并更新了代码,使其运行得更符合您的预期

函数getUniqueTimestartingFrom{ startingFrom=startingFrom | | new Date.getTime; 返回函数{ 从++返回开始; } } var myUniqueTime=getUniqueTime; var i=-1; 可变帧=[ {事件:'http://url.tld/?data='+myUniqueTime,超时:5000}, {事件:'http://url.tld/?data=“+myUniqueTime,超时:10000}, {事件:'http://url.tld/?data=“+myUniqueTime,超时:5000} ]; 函数更改{ i=i+1>=frames.length?0:i+1; var myevent=frames[i]; document.getElementByIdconsole.innerHTML=document.getElementByIdconsole.innerHTML++myevent.event+waiting+myevent.timeout+s; setTimeoutChangeSrc,myevent.timeout; } window.onload=ChangeSrc;
查询字符串的语法为:

?field1=value1[&field2=value2...]
您省略了字段1,正在使用:

?=value1
。。。其中value1是一个随机数

这可能不足以指示将其指定为新URL

试着这样做:

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

谢谢你的快速回复!非常感谢,但是,它似乎不起作用。。。iFrame没有向其中加载任何内容。如果我添加了一些其他幻灯片,它们会出现,但是getRandomUrl没有显示Events.php页面。我现在已经将Event.php加载到iframe中,我只需要在数组中为帧设置一个时间。现在唯一需要做的就是在URL末尾附加随机数,这意味着在每次循环时,都会强制重新加载页面以生成一个新的随机事件。我需要/Events.php?=+Math.floorMath.random*99999在每次显示时生成一个新的随机字符串。这可能吗?如果我在jsfiddle.net中运行这段代码,它每次都会给我新的URL,您如何调用它?var frames=ArraygetRandomUrl、getRandomUrl、getRandomUrl;警报框架;函数getRandomUrl{return+Math.floorMath.random*99999;}感谢您的回复,不要认为我原来的问题很清楚,所以我在上面重新编写了它…再次感谢您的回复。我已经尝试了新的代码,但是我现在没有在iframe中加载任何内容。我已经更新了上面的代码,以反映我现在的情况……好的,我认为是时候认真对待调试了。在返回变量本身之前,为URL top分配一个变量console.log,然后手动转到页面查看出现了什么问题,因为代码应该生成一个随机数,并且错误不会出现在Javascript中。我认为@RickHitchcock在可能的错误上有很好的线索
在php中…未捕获类型错误:myUniqueTime不是函数getRandomUrl匿名函数…函数getUniqueTimestartingfrom{…应该从大写字母F开始。仍在生成Events.php?=未定义为URL变量,尽管感谢您的回答,但不要认为我原来的问题很清楚,所以我在上面重新编写了它…这里回答了…感谢大家的输入,非常感谢。
return "http://www.example.com/Events.php?rnd=" + Math.floor(Math.random()*99999);