等待HTML中的Javascript函数完成

时间:2012-01-05 17:37:04

标签: javascript html

如何确保在继续使用HTML代码中的下一行之前完成Javascript功能。

例如:我在main()中有一个Javascript代码,并且如下所示调用它。在此结束之前,下一行HTML代码(如加载JPEG)将显示在Web浏览器中。 有什么方法可以确保完全执行main()调用。

<script language="JavaScript" type="text/javascript"> main();</script>

正如你们中的一些人猜对了,main()中有一个异步调用,它使用XMLHTTPRequest()来获取构建网页所需的一些值。函数main是下面的

function main()
{
    var requestor = new net.Requestor("admin/getparam.cgi?mainvideostream&codectype", CurrentHandler);
}

和net.Requestor = function(url,onload,onerror,method,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();
  }

所以我必须在加载页面之前找出stream变量。

3 个答案:

答案 0 :(得分:2)

简短的回答是否定的,没有(安全的,符合标准的)方法可以在脚本运行时停止加载页面。

通常,这可以通过以下两种方式之一解决:

  1. 通过将CSS display属性设置为none,隐藏您不希望加载的网页上的元素。在脚本末尾添加一个命令以重置这些元素的显示属性。

  2. 将您最初不想加载的元素移动到单独的HTML文件中。在脚本执行结束时,向服务器发出AJAX调用以获取第二个文件并将其加载到主文件中的适当位置。

答案 1 :(得分:0)

如果main中的代码没有异步执行,则应在DOM加载事件后绑定代码。使用jQuery:

$(document).load(function(){
main();

});

或没有jquery,在你的身体标签中:

<body onload="main()">

答案 2 :(得分:0)

好的,正如这里的其他人已经注意到事情的一般顺序是加载页面然后运行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>