Javascript 在表单提交之前与AngularJS同步调用服务器
我正在将我的AngularJS应用程序与一个支付网关集成,该网关需要提交一个表单,以启动收集用户信用卡详细信息的过程 流程如下:Javascript 在表单提交之前与AngularJS同步调用服务器,javascript,angularjs,payment-gateway,Javascript,Angularjs,Payment Gateway,我正在将我的AngularJS应用程序与一个支付网关集成,该网关需要提交一个表单,以启动收集用户信用卡详细信息的过程 流程如下: 用户以HTML表单填写信息 用户单击提交按钮 onsubmit JavaScript调用AngularJS控制器函数,该函数通过$http调用我的服务器并返回一些信息 此信息用于填充表单中的隐藏字段 表单将提交到支付网关站点,用户在该站点上输入其信用卡详细信息 为了使这个过程正常工作,我需要在从onsubmit返回true或false并允许提交表单之前返回对服务器的调
function allowSubmit() {
var scope = angular.element(document.querySelector( '#bookingForm' )).scope();
try {
var success = scope.createPayment();//createPayment is a method on my controller I need to synchronously call my backend with
return success;
} catch (e) {
//log/alert
return false;
}
}
<form id="bookingForm" name="bookingForm" novalidate action=" https://www.example.com/xyz/process.trans" method="POST" onsubmit="return allowSubmit();" >
...
<button type="submit" class="btn btn-success btn-lg pull-right">Payment</button>
...
</form>
函数allowSubmit(){
var scope=angular.element(document.querySelector('#bookingForm')).scope();
试一试{
var success=scope.createPayment();//createPayment是我的控制器上的一个方法,我需要用它同步调用后端
回归成功;
}捕获(e){
//日志/警报
返回false;
}
}
...
付款
...
解决方案看起来是:在不使用操作或方法的情况下创建表单,然后设置它们并在从控制器中的服务器回调时提交
<form id="bookingForm" name="bookingForm" novalidate >
...
<button class="btn btn-success btn-lg pull-right" ng-click="createPaymentAndNavigate(bookingForm.$valid)">Payment</button>
...
</form>
//In server callback on controller
var bookingForm = document.getElementById('bookingForm')
bookingForm.action = "https://www.example.com/xyz/process.trans";
bookingForm.method = "POST";
bookingForm.submit();
...
付款
...
//控制器上的服务器内回调
var bookingForm=document.getElementById('bookingForm')
bookingForm.action=”https://www.example.com/xyz/process.trans";
bookingForm.method=“POST”;
bookingForm.submit();