在我的应用中,我使用jQuery post的Ajax导航。
情境:
让我们假设用户键入url并加载索引页面。现在他想去他的个人资料页面(假设他之前已经登录)。单击“我的个人资料”链接,执行一个jQuery帖子,它会在主div中返回html结果。
我遇到的问题:
配置文件页面有自己的profile_functions.js文件,其中包含与js相关的配置文件。在jQuery帖子中,我会进行检查,因此当请求用户配置文件页面时,它会在执行jQuery之前加载profile_functions.js帖子。 (使用document.getElementsByTagName("head")[0].appendChild(file);
)
在profile_functions.js中我有一些jQuery插件需要使用放置在HTML结果的$(document).ready(function(){ });
进行初始化。我注意到的问题是,有时jQuery post结果的检索时间早于.js文件的加载,所以我得到一个错误,当然jQuery插件不起作用。
所以我的问题是:使用jQuery帖子,从post-result-html代码中加载新的.js文件的最佳和最成功的方法是什么?
编辑:根据要求,这是我的代码:
//Loads the new JS
function loadjscss(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);}
}
//Part of function that loads the new page
function ajax_menu_nav(requested_page) {
if(requested_page=='profile_page'){
loadjscss("/static/profile_functions.js", "js");
}
$.post("/ajax_menu.php",
{
rp:requested_page,
rand:Math.random()
} ,
function(rd) {
$('#main').html(rd.tpl);
}, "json"
);
}
现在结果HTML代码包含其他内容:
$(document).ready(function(){ function_a(); });
function_a()来自profile_functions.js文件。
答案 0 :(得分:0)
我认为问题是当DOM准备就绪并且因此在加载脚本之前调用function_a。你应该在加载脚本时自己调用它,在回调中。
答案 1 :(得分:0)
将havascript包含在html文件中可能是确保所有内容都能很好地加载的唯一方法。你设置它的方式,你不能确定哪个将首先加载,js文件,或ajax_menu.php返回。
我用这种方式加载整个页面内容,这可能是一个痛苦,看起来很乱(每个页面加载到处都是javascript)。您还可以遇到更多问题。这只是从经验来看,如果你能做到,那就去做吧。
编辑:您可以尝试的一件事是,将$ .post()请求放在您包含的js文件中。然后你所要做的就是添加js文件,然后完成其余的工作(它会加载它自己的页面)