在HTML中等待Javascript函数完成
如何在移动到HTML代码中的下一行之前确保Javascript函数已完成。在HTML中等待Javascript函数完成
例如:我在main()
中有一个Javascript代码并调用如下所示。在完成之前,下一行HTML代码就像加载JPEG一样显示在浏览器中。 有什么办法可以确保main()
调用完全执行。
<script language="JavaScript" type="text/javascript"> main();</script>
你们有些人猜中,可能是在主()的调用asynchroous它使用一个XMLHttpRequest()来得到一些我需要形成网页中的值。功能主要是如下
function main()
{
var requestor = new net.Requestor("admin/getparam.cgi?mainvideostream&codectype", CurrentHandler);
}
此thers内
和net.Requestor =函数(URL,有载,的onerror,方法,则params,则contentType) 被和XMLHttpRequest的(...)
而Currenthandler是另一个处理来自requset的响应的函数。
function CurrentHandler()
{
settings = this.req.responseText.split("\n");
for(var j=0; j<settings.length-1; j++)
{
var currentST= settings[j].split("=");
name = currentST[0];
value = currentST[1];
switch(name)
{
case "mainvideostream": cur_camid = value; break;
case "codectype": stream = value; break;
}
}
mainSection();
}
所以我必须在加载页面之前找出流变量。
简短的回答是否定的,没有(安全的,符合标准)的方式来停止加载页面,而你脚本运行。
通常,这是工作,围绕一个的方法有两种:
隐藏你不想页面上的元素似乎通过他们的CSS
display
属性设置为加载none
。在脚本末尾添加一个命令,以重置这些元素的显示属性。将您不想初始加载的元素移动到单独的HTML文件中。在脚本执行结束时,将AJAX调用回服务器以获取第二个文件并将其加载到主文件中的适当位置。
如果您的main代码不是异步执行的,您应该在DOM加载事件后绑定您的代码。使用jQuery:
$(document).load(function(){
main();
});
或不jQuery的,在你的身体标记:
<body onload="main()">
好的,因为这里的其他人已经注意到事情的一般顺序是加载页面,然后运行JavaScript。不过,你可以使用Ajax来解决这个问题。基本思路是这样的:
用空白页面创建一个空白页面,当空白页面加载完成后运行,然后在这个javascript代码块结束时,通过ajax调用页面内容。
继承人一些jQuery代码会做同样的事情:
<script>
$(document).load(function(){
//YOUR CODE HERE//
$.ajax({
type:"GET",
url:"", // <-- url of the contents of your page here
dataType:"text",
success:function(data){
$(".container").html(data);
},
error:function(jqXHR,textStatus,errorThrown){
$(".container").html("<pre>"+textStatus+"</pre><pre>"+errorThrown+"</pre>");
}
});
</script>
<body>
<div class="container"></div>
</body>
我假设'main'功能有一定的异步代码。你可以显示代码的功能? – 2012-01-05 17:39:48
我想你想延迟整个页面加载,直到这一点的JavaScript已完成? – Jimmery 2012-01-05 17:43:37
JavaScript异步运行,页面异步加载。尽管有一些方法可以阻止JS(一个非常糟糕的主意),但您永远无法阻止浏览器同时加载其他内容(用户也不希望网站尝试控制该内容)。问题是:为什么你想要/需要这个功能? – Rudu 2012-01-05 17:44:06