在jQuery发布后加载新javascript文件的最佳方法是什么?

时间:2014-01-01 12:46:30

标签: javascript jquery document-ready jquery-post

在我的应用中,我使用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文件。

2 个答案:

答案 0 :(得分:0)

我认为问题是当DOM准备就绪并且因此在加载脚本之前调用function_a。你应该在加载脚本时自己调用它,在回调中。

答案 1 :(得分:0)

将havascript包含在html文件中可能是确保所有内容都能很好地加载的唯一方法。你设置它的方式,你不能确定哪个将首先加载,js文件,或ajax_menu.php返回。

我用这种方式加载整个页面内容,这可能是一个痛苦,看起来很乱(每个页面加载到处都是javascript)。您还可以遇到更多问题。这只是从经验来看,如果你能做到,那就去做吧。

编辑:您可以尝试的一件事是,将$ .post()请求放在您包含的js文件中。然后你所要做的就是添加js文件,然后完成其余的工作(它会加载它自己的页面)

相关问题