Javascript 在加载文档之前从php服务器获取数据

Javascript 在加载文档之前从php服务器获取数据,javascript,Javascript,为了从服务器恢复数据,我使用XMLHttpRequest,我的代码是这样的(工作正常) 现在我想使用一个特定的库,但它要求在触发document.onload之前加载此数据。我该怎么做?我可以使用上面的代码,但在加载数据之前阻止HTML解析吗?我是说 <head> <script> // block parsing until data are loaded // put data from server in a variable

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

现在我想使用一个特定的库,但它要求在触发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>

//在加载数据之前阻止解析
//将来自服务器的数据放入变量中

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

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

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

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

<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>

xmlhttpLoad=新的XMLHttpRequest();
xmlhttpLoad.onreadystatechange=函数(){
if(xmlhttpLoad.readyState==4&&xmlhttpLoad.status==200){
//将数据放入不可见的HTML元素中
}
}
open(“get”,“somepage”,false);

}

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

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

<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>

xmlhttpLoad=新的XMLHttpRequest();
xmlhttpLoad.onreadystatechange=函数(){
if(xmlhttpLoad.readyState==4&&xmlhttpLoad.status==200){
//将数据放入不可见的HTML元素中
}
}
open(“get”,“somepage”,false);

}

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

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);

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

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);

您是否可以将所有html隐藏在正文中(
display:none
)调用ajax,然后在成功请求后再次显示它们?问题是,当启动window.onload事件时,库会对这些数据进行一些处理,因此,如果没有这个约束,并且文档没有告诉您如何实现这一点,那么它就不应该像一个疯狂的库一样工作。什么是库?@Brad你说得对,但我修改了库,使其使用方式与原来的用途完全不同。你可以将所有html隐藏在正文中(
display:none
)调用ajax,然后在成功请求后再次显示它们吗?问题是,当触发window.onload事件时,库会对这些数据进行一些处理,因此,如果没有这个约束,并且文档没有告诉您如何实现这一点,那么它就不应该像一个疯狂的库一样工作。什么是库?@Brad你说得对,但我修改了库,使其使用方式与最初的用途完全不同。我认为它只是依赖于数据。在这种情况下,你可以为添加的脚本设置一个onload事件:
script.onload=function(){//code here for when library have loaded}
我认为这取决于数据。在本例中,您可以为正在添加的脚本设置一个onload事件:
script.onload=function(){//code在这里表示何时加载库}
@LorenzoC我必须说我对您的回答。@LorenzoC我必须说我对您的回答。