[英]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.