包含.getScript()的jQuery插件?

时间:2011-08-10 17:38:15

标签: jquery-plugins jquery

我正在尝试使用jQuery.getScript加载jQuery模板插件,但即使它执行请求并且文件正确进入(用测试JS替换url并且javascript确实得到正确评估),jQuery .tmpl仍未定义,但如果我在Chrome的控制台中运行jQuery.tmpl,它就是一个函数。

示例代码:

<script type="text/javascript">    
jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js');
console.log(jQuery.tmpl); // returns undefined.
</script>

知道问题可能是什么?

7 个答案:

答案 0 :(得分:3)

您应该等到加载脚本。

jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js',
    function(){
        console.log(jQuery.tmpl);
    }
);

答案 1 :(得分:2)

等到它加载。尝试使用:

jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', function() {
    console.log(jQuery.tmpl);
});

或为了使其更具可读性,请尝试使用:

$.ajax({
    url: "http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js",
    dataType: "script",
    success: function() {
        console.log(jQuery.tmpl);   
    }
});

答案 2 :(得分:0)

您应该在getScript

的回调(成功处理程序)方法中使用它
jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js',
function(){
   console.log(jQuery.tmpl);
});

答案 3 :(得分:0)

您的问题是脚本是异步加载的,这意味着您需要等待它完成才能使用它。

http://api.jquery.com/jQuery.getScript/

解决方案是:

$.getScript('.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', function (data, textStatus) {
    //Use the script now
});

如果您需要立即使用,我建议您只需在页面上添加对脚本的引用。

答案 4 :(得分:0)

当下一个语句立即执行时,你需要在回调中包装它,而脚本加载可能需要一些时间。:

jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', function() {
   console.log(jQuery.tmpl);
});

答案 5 :(得分:0)

我最终只是将.ajax调用同步,因此我可以将其用作逻辑流程的一部分:

jQuery.ajax({
    url: script,
    async: false,
    dataType: "script",
    success: function() {
        console.log("Loaded "+script);   
    },
    complete: function() {
        console.log("Failed to load "+script);   
    }
});

答案 6 :(得分:0)

同步或异步扩展方法到$ .getScript:https://github.com/hudsonfoo/jquery-getscripts