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