我偶然发现了一个非常奇怪的问题。
我使用ajax(确切地说是jquery加载)内容使我的网站完全正常工作,但我不得不将其重写为PHP主要是因为谷歌动态#链接的SEO问题。现在任何方式脚本按需按顺序执行以下脚本如何显示它不起作用。但显然代码很好,或者在某些情况下似乎是因为它在#时有效!加载链接并且主脚本根据需要调用用于此特定链接的所需脚本,即使我在主脚本文件中一次性调用它们也可以工作!这种现象的例子:
function getalljs() {
getJs("js/vertical.js","js");
getJs("js/steps.js","js");
getJs("js/animatesteps.js","js");
}
还有另一个奇怪的事情,其中一个按需加载的脚本与下面编写的相同,实际加载但jQuery加载没有(它包含背景动画)。
这些是我的剧本:
此函数用于淡出内容,加载新内容,更改url hash和fadein:
function loadajax(toLoad, rest, div, js) {
window.location.hash = toLoad;
div.fadeOut(150, loadContent);
function loadContent() {
contentload(toLoad, rest, div, js);
reappear();
}
function reappear() {
div.fadeIn(1000);
}
return false;
}
正如您可能已经注意到它调用另一个函数,这个函数用于加载html,并加载jQuery。
function contentload(fragment, rest, div, js) {
fragment = fragment.slice(1).replace('!', '')
div.load((fragment + rest), getJs(js, "js"));
}
是的,这个人又召唤另一个人来抓住新装载的javascipt:
function getJs(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript")
fileref.setAttribute("src", filename)
}
else if (filetype=="css"){ //if filename is an external CSS file
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
}
这里的代码负责将此调用为动作:
$("#horizontal_cssmenu a").click(function () {
var div = $('#contentsth');
var toLoad = $(this).attr('href');
var rest = '?ajax=1';
var javka = 'js/vertical.js';
loadajax(toLoad, rest, div, javka);
return false;
});