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

时间:2015-02-23 13:09:26

标签: jquery

我有这个问题:

我用户google recapcha,我有一个服务器端加载的JS数据。我使用recapcha的方式是

<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';

现在这没关系,但我想要做的是某种“promisses?”,basiccaly我正在寻找像

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

所以我可以输入所有的回调函数,加载等..然后初始化我的JS类(因为我使用那些回调的值)

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

Uncaught ReferenceError: onScriptLoaded is not defined

因为我没有解释“onScriptLoaded”是什么。

那么..有没有办法让这种语法在我的情况下起作用

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以尝试类似

的内容
//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