JavaScript 动态加载页面、CSS 和 JS 的 Ajax 实现

作者:白露

时间:2026-10-24

浏览:220

本文介绍一个基于 XMLHttpRequest 的 JavaScript 工具类,用于异步加载 HTML 页面内容,并动态插入外部 CSS 和 JS 文件。代码兼容 IE6 至现代浏览器,支持缓存控制、加载状态提示及自定义回调函数,适用于单页应用中的局部内容更新。

文章目录

JavaScript 动态加载页面、CSS 和 JS 的 Ajax 实现

代码示例如下:

/*********************************************** 
* Ajax页面获取器 - 由 JavaScript Kit (www.javascriptkit.com) 提供
***********************************************/ 
var ajaxpagefetcher={
loadingmessage: "正在加载页面,请稍候...",
exfilesadded: "",
connect:function(containerid, pageurl, bustcache, jsfiles, cssfiles){
var page_request = false
var bustcacheparameter=""
if (window.XMLHttpRequest) // 如果是 Mozilla, IE7, Safari 等浏览器
page_request = new XMLHttpRequest()
else if (window.ActiveXObject){ // 如果是 IE6 或更低版本
try {
page_request = new ActiveXObject("Msxml2.XMLHTTP")
} 
catch (e){
try{
page_request = new ActiveXObject("Microsoft.XMLHTTP")
} 
catch (e){}
} 
} 
else
return false
var ajaxfriendlyurl=pageurl.replace(/^http:\/\/[^\/]+\/\/i, "http://"+window.location.hostname+"/")
page_request.onreadystatechange=function(){ajaxpagefetcher.loadpage(page_request, containerid, pageurl, jsfiles, cssfiles)}
if (bustcache) // 如果启用外部页面缓存破坏
bustcacheparameter=(ajaxfriendlyurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
document.getElementById(containerid).innerHTML=ajaxpagefetcher.loadingmessage // 显示"正在获取页面"的消息
page_request.open('GET', ajaxfriendlyurl+bustcacheparameter, true)
page_request.send(null)
}, 
loadpage:function(page_request, containerid, pageurl, jsfiles, cssfiles){
if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
document.getElementById(containerid).innerHTML=page_request.responseText
for (var i=0; i<jsfiles.length; i++)
this.loadjscssfile(jsfiles[i], "js")
for (var i=0; i<cssfiles.length; i++)
this.loadjscssfile(cssfiles[i], "css")
this.pageloadaction(pageurl) // 调用自定义的"页面加载后"事件
} 
}, 
createjscssfile:function(filename, filetype){
if (filetype=="js"){ // 如果文件名是外部 JavaScript 文件
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
} 
else if (filetype=="css"){ // 如果文件名是外部 CSS 文件
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
} 
return fileref
}, 
loadjscssfile:function(filename, filetype){ // 加载或替换(如果已存在)外部 .js 和 .css 文件
if (this.exfilesadded.indexOf("["+filename+"]")==-1){ // 如果要加载的文件尚未加载
var newelement=this.createjscssfile(filename, filetype)
document.getElementsByTagName("head")[0].appendChild(newelement)
this.exfilesadded+="["+filename+"]" // 记住此文件已添加
} 
else{ // 如果文件已加载(替换/刷新它)
var targetelement=(filetype=="js")? "script" : (filetype=="css")? "link" : "none" // 确定要创建节点列表的元素类型
var targetattr=(filetype=="js")? "src" : (filetype=="css")? "href" : "none" // 确定要测试的相应属性
var allsuspects=document.getElementsByTagName(targetelement)
for (var i=allsuspects.length; i>=0; i--){ // 在节点列表中向后搜索以找到匹配的元素并移除
if (allsuspects[i] && allsuspects[i].getAttribute(targetattr)!=null && allsuspects[i].getAttribute(targetattr).indexOf(filename)!=-1){
var newelement=this.createjscssfile(filename, filetype)
allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i])
} 
} 
} 
}, 
pageloadaction:function(pageurl){
this.onpageload(pageurl) // 当获取/加载 AJAX 页面时调用自定义的 onpageload() 函数
}, 
onpageload:function(pageurl){
// 默认情况下不执行任何操作
}, 
load:function(containerid, pageurl, bustcache, jsfiles, cssfiles){
var jsfiles=(typeof jsfiles=="undefined" || jsfiles=="")? [] : jsfiles
var cssfiles=(typeof cssfiles=="undefined" || cssfiles=="")? [] : cssfiles
this.connect(containerid, pageurl, bustcache, jsfiles, cssfiles)
} 
} // 对象结束
// 示例用法:
//1) ajaxpagefetcher.load("mydiv", "content.htm", true)
//2) ajaxpagefetcher.load("mydiv2", "content.htm", true, ["external.js"])
//3) ajaxpagefetcher.load("mydiv2", "content.htm", true, ["external.js"], ["external.css"])
//4) ajaxpagefetcher.load("mydiv2", "content.htm", true, ["external.js", "external2.js"])
//5) ajaxpagefetcher.load("mydiv2", "content.htm", true, "", ["external.css", "external2.css"])

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章