$.one之后的jQuery AJAX回调



我有一个代码块,我想在单击时执行一次,然后进行回调。我尝试了一些不同的东西;然而,我似乎无法让回调正常工作。示例如下:

更新

$('#button').one('click', function() {
    $.getScript('jquery-validation-plugin-part1.js');
    $.getScript('jquery-validation-plugin-part2.js');
    attachvalidation('#form-to-attach');
});

目前,我正在$.one();块中加载一些带有$.getScript();的额外脚本。每当我尝试初始化这些脚本时,它都失败了。我确实意识到$.getScript();内置了一个回调函数,但我需要在init()之前加载所有脚本。

$.one()之后,我尝试了$.done(),但没有成功。有什么线索可以让它发挥作用吗?

更新

所以我添加了几行代码。本质上,我正在加载一个表单验证插件,并需要在加载脚本后在表单上初始化它。$.getScript()回调的问题是插件有几个文件需要在初始化之前加载。

$.getScript()是异步的。这意味着它将在未来某个时候完成,但不是马上完成。

要知道它何时加载,并且它的函数现在可用,可以使用完成回调来在加载脚本后运行代码。您可以使用$.getScript()中的完成回调这样做:

$('#button').one('click', function() {
    $.getScript('jquery-validation-plugin.js', function() {
        attachvalidation('#form-to-attach');
    });
});

当你这样说时,"$.getScript()回调的问题是插件有几个文件需要在初始化前加载。"不清楚你的意思。你是说jquery-validation-plugin.js脚本本身是异步加载的,你需要等到这些东西也被加载了?如果是这样的话,那么你将需要该插件的一些接口来告诉你什么时候完成了异步加载。在没有提供某种接口的情况下,没有黑盒的方法可以让你知道什么时候加载完东西。

或者你是说在加载某些东西之前无法初始化脚本?如果是这种情况,那么只有当文件和脚本都完成加载时,才必须调用attachvalidation()。我们必须看看你正在加载什么,才能知道如何最好地建议你这样做。

在检索到脚本后尝试使用回调:

$.getScript('jquery-validation-plugin.js', function(){
    attachvalidation('#form-to-attach');
});

给出的答案是正确的,但我想提供另一种可能性。

类似于:

$('#button').one('click', function() {
     $.getScript("jquery-validation-plugin.js")
       .done(function() {
         attachvalidation('#form-to-attach');
     })
       .fail(function() {
         console.log("Script failed to load.);
     });
});

也可以工作,并允许您处理故障。

最新更新