0

为了从服务器恢复数据,我使用 XMLHttpRequest,我的代码是这样的(它工作正常)

window.onload = function getArtists() {
    xmlhttpLoad=new XMLHttpRequest();           
    xmlhttpLoad.onreadystatechange=function() {
        if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) {
            // put data in an invisible HTML elem           
        }
    }
}

现在我想使用一个特定的库,但它要求在文档 document.onload 被触发之前加载这些数据。我怎样才能做到这一点?我可以使用上面的代码,但在加载数据之前阻止 HTML 解析?我的意思是

<head>
    <script>
        // block parsing until data are loaded
        // put data from server in a variable
    </script>
    <script src="newLib.js"></script>
<head>
4

3 回答 3

2

您可以尝试将 AJAX 调用设置为async = false,因此它将停止页面执行,直到完成。

于 2012-07-03T15:30:34.970 回答
1

如果你不使用load事件而直接运行代码,它会在脚本块被解析后立即启动。

要使下一个块的解析等待 AJAX 响应,您必须发出同步请求。您可以通过false在调用中提供第三个参数(异步)来做到这一点open

<head>
  <script type="text/javascript">

  xmlhttpLoad=new XMLHttpRequest();
  xmlhttpLoad.onreadystatechange=function() {
    if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) {
        // put data in an invisible HTML elem           
    }
  }
  xmlhttpLoad.open("get", "somepage", false);

  </script>
  <script type="text/javascript" src="newLib.js"></script>
<head>

}

于 2012-07-03T15:34:35.530 回答
1

您可以在数据准备好时加载库:

xmlhttpLoad=new XMLHttpRequest();
xmlhttpLoad.onreadystatechange=function() {
    if (xmlhttpLoad.readyState==4 && xmlhttpLoad.status==200) {
        // put data in an invisible HTML elem
        var script = document.createElement("script");
        script.src = "newLib.js";
        document.getElementsByTagName("head")[0].appendChild(script);
    }
}
xmlhttpLoad.open("get", "somepage", false);
于 2012-07-03T15:44:36.040 回答