在Javascript数组内部调用URL变量
Calling A URL Variable Inside Javascript Array
我正试图将一组预定的URL以特定的顺序加载到iframe中,每个幻灯片都有特定的时间。
其中一张幻灯片(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>
查询字符串的语法为:
?field1=value1[&field2=value2...]
您已省略field1
,正在使用:
?=value1
其中CCD_ 2是随机数。
这可能不足以指示将其指定为新URL。
试试这样的东西:
return "http://www.example.com/Events.php?rnd=" + Math.floor(Math.random()*99999);
我不太确定你是如何做到这一点的,但让我们试着修改一下这段代码,看看我们是否能让它发挥作用。
首先,对变量声明进行一些更改。根据我收集到的信息,您希望为事件填写一个带有"值"(只是一个字符串)的URL,还希望保存一个"超时时间"(以毫秒为单位)。现在,为了做到这一点,最好创建一个object
s的array
。在php中,这将是一个带有嵌套关联数组的数字数组(也称为array(array("a"=>"b"), array("c"=>"d"));
)。在Javascript中,您使用new Array()
或[]
来启动数组,而不是php的array()
"函数"。类似地,如果您调用new Object();
或使用{}
,Javascript将创建一个object
(或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}
];
现在我们所需要做的就是稍微修改一下你的函数。从帧数组中获取一个随机元素,然后要求该元素返回您保存在键"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 strtotime("now")`函数完全相同,每次调用它时字符串都会不同。但也许闭包在这里很有用,所以可以试试这个:
/* 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();
}
这有帮助吗?
更新的原始答案
我在原始答案中添加了随机数生成器。我试着用已经存在的代码来实现这一点,但与我最初的答案相比,这太难了。我添加了一个片段并更新了代码,使其运行更加符合您的预期。
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;
<div id="console"></div>
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 需要url导航从DropDown Value onClick按钮传递url变量
- Google Script HtmlService,通过多个选项卡复制URL变量
- 将链接 URL 变量传递给 javascript
- 使用 ASP.NET 将 URL 变量传递给 Javascript 函数
- Angular ui路由器,通过url/url变量保存状态
- selectlist值的ColdFusion URL变量
- 在Javascript数组内部调用URL变量
- 在搜索中突出显示关键字会破坏 URL 变量的传递
- 通过 $_GET 将 URL 变量传递给 Javascript
- 文件路径及其 URL 变量在连接时被缩短
- 在 Django 视图中渲染 URL 变量
- 通过javascript将url变量添加到href链接中
- 从 URL 变量填充电子邮件字段
- 将长混合字符串变量从 javascript 传递到 GET url 变量的 url 友好方法是什么?
- 从 iFrame 中提取 url 变量
- 无法使用包含 url 变量的 javascript 函数刷新到页面底部
- Google上的URL变量'我的地图'
- Java脚本URL加载器和URL变量
- Javascript Bookmarklet获取Url变量,打开多个搜索窗口