我必须使用外部braintree.js脚本才能生成付款小部件。 我无法控制这一点。这是我的.html页面中的代码:
<div id="myClient" ng-show="false">{{myClientToken}}</div>
<form id="checkout" action="actionURL" method="post" enctype="multipart/form-data">
<div id="payment-form"></div>
<input type="hidden" name="amount" value="{{balance}}" />
<input type="hidden" name="uuid" value="{{uuid}}" />
<input type="hidden" name="ptype" value="custom" />
<input type="submit" id="paypal" value="Pay Now">
<!--form not shown to the user-->
</form>
<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
<script>
$(document).ready(function() {
var clientToken = $('#myClient').html();
braintree.setup(clientToken, "dropin", {
container: "payment-form"
});
});
</script>
在我的控制器中,我从REST服务器成功生成令牌:
myFactory.getToken()
.then(function(token) {
$scope.myClientToken = token.data;
但是,正如您所料,html加载的速度比令牌返回控制器的速度快。
这显然会导致“配置错误”错误,因为braintree.js脚本需要在调用它时不会获得的令牌。
我在div上尝试了ng-init和ng-if,但无济于事。
答案 0 :(得分:0)
链检索令牌后启动braintree。
myFactory.getToken()
.then(function(token) {
$scope.myClientToken = token.data;
return token.data;
}) .then(function (clientToken) {
braintree.setup(clientToken, "dropin", {
container: "payment-form"
});
};