Javascript 在表单提交之前与AngularJS同步调用服务器

Javascript 在表单提交之前与AngularJS同步调用服务器,javascript,angularjs,payment-gateway,Javascript,Angularjs,Payment Gateway,我正在将我的AngularJS应用程序与一个支付网关集成,该网关需要提交一个表单,以启动收集用户信用卡详细信息的过程 流程如下: 用户以HTML表单填写信息 用户单击提交按钮 onsubmit JavaScript调用AngularJS控制器函数,该函数通过$http调用我的服务器并返回一些信息 此信息用于填充表单中的隐藏字段 表单将提交到支付网关站点,用户在该站点上输入其信用卡详细信息 为了使这个过程正常工作,我需要在从onsubmit返回true或false并允许提交表单之前返回对服务器的调

我正在将我的AngularJS应用程序与一个支付网关集成,该网关需要提交一个表单,以启动收集用户信用卡详细信息的过程

流程如下:

  • 用户以HTML表单填写信息
  • 用户单击提交按钮
  • onsubmit JavaScript调用AngularJS控制器函数,该函数通过$http调用我的服务器并返回一些信息
  • 此信息用于填充表单中的隐藏字段
  • 表单将提交到支付网关站点,用户在该站点上输入其信用卡详细信息
  • 为了使这个过程正常工作,我需要在从onsubmit返回true或false并允许提交表单之前返回对服务器的调用

    所有使用承诺($q)的示例最终都会生成使用回调的代码。我如何通过同步调用实现上述流程,或者是否有其他方法来实现我的要求

    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();