[英]How to load page synchronously using jQuery
目前我正在使用jQuery来选择我的索引页面应该加载什么,这取决于是否设置了cookie。
例如,如果设置了cookie,则index.html的body标签应加载hasCookie.html,如果未设置cookie,则加载noCookieSet.html。
我的索引页面目前有:
load user scripts
load styling scripts
<html><body></body></html>
用户脚本具有检查cookie是否已设置的代码。 如果是,我使用jQuery的加载将内容加载到正文中:
$(document.body).load('hasCookie.html')
但是,由于这是异步执行的,因此在更新body标记之前已加载样式脚本,因此未对样式进行样式设置。
有没有办法同步加载,或者我应该以错误的方式接近这个?
编辑:如果它有帮助,样式脚本基本上是jQueryUI
AFAIK,JQuery加载不能同步。
你可以用回调函数来解决这个问题。
$(document.body).load('hasCookie.html', function(){
//call styling script here
});
在您的情况下,这听起来如果可能的话,实现服务器端真的是一个更好的主意。 在PHP中,检测您想要的cookie是否设置在$ _COOKIE数组中并输出正确的页面是一件简单的事情。
您可以将其形成为AJAX请求,并使用响应填充页面。 将async选项设置为false。 这个答案有更多: 如何让jQuery执行同步而非异步的Ajax请求?
只需将document.location.href更改为页面的url即可。
你正在做的是用ajax加载内容并将其放在页面体内。 如果您不希望头部中声明的任何资源被请求,您可以这样做。 但是没有意义,因为你可以通过缓存来实现。
尝试
$(document).ready(function() { $(document.body).load('hasCookie.html'); });
这将推迟加载,直到其他所有内容都已存在。
我就是这样做的。
您可以在Ajax函数的回调时附加Style和Javascript。
$.ajax({
url: somePage,
success:function(ajaxData){
//ATTACH AND RUN CORRESPONDING PAGE SCRIPT
var script = somePage + '.js';
$.getScript(script);
//ATTACH CORRESPONDING STYLE SHEET
var style = document.createElement('link');
style.type = 'text/css';
style.href = '/css/'+somePage+'.css';
style.rel = 'stylesheet';
style.media = 'screen';
document.getElementsByTagName('head')[0].appendChild(style);
//ADD HTML RETURNED
$('body').html(ajaxData);
});
这允许加载所有内容,包括样式和javascript,因为脚本名称和css文件名相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.