我用_tumIsler.js(_allStuff.js)动态加载js文件
<script src="../js/_tumJsler.js" type="text/javascript"></script>
它包含:
// url=> http: + // + localhost:4399 + /yabant/
// ---- ---- -------------- --------
// protocol + "//" + host + '/virtualDirectory/'
var baseUrl = document.location.protocol + "//" + document.location.host + '/yabant/';
// If there is "~/" at the begining of url, replace it with baseUrl
function ResolveUrl(url) {
if (url.indexOf("~/") == 0) {
url = baseUrl + url.substring(2);
}
return url;
}
// Attaching scripts to any tag
function addJavascript(jsname, pos) {
var th = document.getElementsByTagName(pos)[0];
var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', jsname);
th.appendChild(s);
}
// I want to make sure jQuery is loaded?
addJavascript(ResolveUrl('~/js/1_jquery-1.4.2.min.js'), 'head');
var loaded = false; // assume it didn't first and if it is change it to true
function fControl() {
// alert("JQUERY is loaded?");
if (typeof jQuery == 'undefined') {
loaded = false;
fTry2LoadJquery();
} else {
loaded = true;
fGetOtherScripts();
}
}
// Check is jQuery loaded
fControl();
function fTry2LoadJquery() {
// alert("JQUERY didn't load! Trying to reload...");
if (loaded == false) {
setTimeout("fControl()", 1000);
} else {
return;
}
}
function getJavascript(jsname, pos) {
// I want to retrieve every script one by one
$.ajaxSetup({ async: false,
beforeSend: function() {
$.ajaxSetup({
async: false,
cache: true
});
},
complete: function() {
$.ajaxSetup({
async: false,
cache: true
});
},
success: function() {
//
}
});
$.getScript(ResolveUrl(jsname), function() { /* ok! */ });
}
function fGetOtherScripts() {
// alert("Other js files will be load in this function");
getJavascript(ResolveUrl('~/js/5_json_parse.js'), 'head');
getJavascript(ResolveUrl('~/js/3_jquery.colorbox-min.js'), 'head');
getJavascript(ResolveUrl('~/js/4_AjaxErrorHandling.js'), 'head');
getJavascript(ResolveUrl('~/js/6_jsSiniflar.js'), 'head');
getJavascript(ResolveUrl('~/js/yabanYeni.js'), 'head');
getJavascript(ResolveUrl('~/js/7_ResimBul.js'), 'head');
getJavascript(ResolveUrl('~/js/8_HaberEkle.js'), 'head');
getJavascript(ResolveUrl('~/js/9_etiketIslemleri.js'), 'head');
getJavascript(ResolveUrl('~/js/bugun.js'), 'head');
getJavascript(ResolveUrl('~/js/yaban.js'), 'head');
getJavascript(ResolveUrl('~/embed/bitgravity/functions.js'), 'head');
}
加载完所有这些js文件后,当执行id为“btnResimYukle”的按钮时,此行正在执行以显示页面内的UploadFile页面.
<script type="text/javascript">
if (jQuery().colorbox) {
alert("colorbox exists");
} else {
alert("colorbox doesn't exist");
$.ajaxSetup({
cache: true,
async: false
});
$.getScript(ResolveUrl('~/js/3_jquery.colorbox-min.js'), function() {
alert("Loaded ! ");
$('#btnResimYukle').live('click', function() {
$.fn.colorbox({ iframe: true, width: 700, height: 600, href: ResolveUrl('~/Yonetim/DosyaYukle.aspx') });
return false;
});
});
}
</script>
首先我想问你们非常好的人,我总是用$.getScript函数调用js文件.它们是否总是在每个$.getScript请求中下载?如果答案是“是”,我该如何防止?这有用吗:
$.ajaxSetup({
cache: true,
async: false
});
其次,当我按F5或Ctrl F5时,我总是收到此错误:
但是当我在网址上按回车键时,没有错误:s
最佳答案 您的加载脚本将脚本附加到head元素,稍后将按DOM顺序处理它们.这意味着它们是在head元素中的内联脚本之后加载的,因此,当然,您得到并反对预期的错误:jQuery尚未定义.更好的方法是只在标题中加载绝对必要的脚本 – 内联脚本运行所需的脚本 – 并将其余脚本(包括内联脚本)移动到文档正文部分的末尾.这样,所有文档元素仍然可以并行加载,从而加快页面加载速度.
如果您这样做,我建议不要异步加载脚本.如果同步加载它们,您会发现可以将更多它们移动到文档的末尾.尽可能地组合脚本以进一步减少加载时间.