如何确保在进入HTML代码的下一行之前完成Javascript函数。
例如:我在main()
中有一个Javascript代码,并调用tht,如下所示。在此结束之前,下一行HTML代码(如加载JPEG)将显示在网络浏览器中。有什么方法可以确保main()
调用完全执行吗。
<script language="JavaScript" type="text/javascript"> main();</script>
正如你们中的一些人正确猜测的那样,main()中有一个异步调用,它使用XMLHTTPRequest()来获取我形成网页所需的一些值。主要功能是低于
function main()
{
var requestor = new net.Requestor("admin/getparam.cgi?mainvideostream&codectype", CurrentHandler);
}
和net。Requestor=函数(url、onload、oneror、method、params、contentType)在这个thers-is和XMLHTTPRequest(…)中
Currenthandler是另一个处理来自请求集的响应的函数。
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()">
ok,正如这里的其他人所指出的,一般的顺序是加载页面,然后运行javascript。但是,您可以使用ajax来解决这个问题。基本的想法是这样的:
使用加载空白页面后运行的javascript创建一个空白页面,然后在这个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>