我有这个问题:
我用户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”是什么。
那么..有没有办法让这种语法在我的情况下起作用
谢谢!
答案 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