在同一个函数中承诺一个回调函数和一个ajax调用



我有一个问题:

我的用户谷歌repacha和我有一个服务器端加载JS数据。我使用recacha的方式是

<script src="https://www.google.com/recaptcha/api.js?onload=onScriptLoaded&render=explicit"></script>

这意味着我在ScriptLoaded上等待这个函数,然后手动渲染capchas。

我还将此包含在我的头标签中

<script type="text/javascript" src="/profile/js"></script>

返回类似的东西

userData = {};
userData.id = 1;
userData.name = 'koko';

现在这是可以的,但我想做的是某种"promises?",基本上我正在寻找类似的语法

$.when( onScriptLoaded, $.getScript( "/profile/js" ) ).done(function( a1, a2 ) {
    console.log(arguments);
});

这样我就可以输入我所有的回调函数、加载等。然后初始化我的JS类(因为我使用了这些回调的值)

然而,在这种情况下,我得到一个错误

Uncaught ReferenceError: onScriptLoaded is not defined

因为我还没有解释"onScriptLoaded"是什么。

所以。。有没有一种方法可以使这种语法在我的中起作用

谢谢!

您可以尝试类似的东西

//a promise that will be resolved once the googe captcha code is executed
var captchaPromise;
(function () {
    var deferred = jQuery.Deferred();
    //the onload callback for google captcha
    window.onScriptLoaded = function (data) {
        console.log('looks like the captcha is complered now', arguments);
        //once the captcha callback is invoked resolve the deferred
        deferred.resolve(data);
    }
    captchaPromise = deferred.promise();
})();
//use the when method with the captch promise and ajax promise
$.when(captchaPromise, $.getScript("/profile/js")).done(function (a1, a2) {
    console.log('when callback');
    console.log(arguments);
});

演示:Fiddle

相关内容

  • 没有找到相关文章

最新更新