如何使用 action 属性发送 html 表单数据而不重定向到另一个页面?

How do you send html form data using the action attribute without redirecting to another page?

我正在使用 Angular 和格子呢。我想提交以下表单,其中 posts public_token 使用 html 表单中的 'action' 属性进行 /authenticate。如何在不重定向到其他页面的情况下将 post public_token 发送到我的服务器 (/authenticate)。

第 2 步:简单集成

在您的网站或网络应用程序中包含以下标记(the 和标签):

-- 一个名为 public_token 的隐藏输入将附加到此表单 一旦用户完成 Link 流程。 Link 然后将提交 表单,将 public_token 发送到您的服务器。 --

<form id="some-id" method="POST" action="/authenticate"></form>

<script
  src="https://cdn.plaid.com/link/stable/link-initialize.js"
  data-client-name="Client Name"
  data-form-id="some-id"
  data-key="test_key"
  data-product="auth"
  data-env="tartan">
</script>

可在此处找到相关说明: https://plaid.com/docs/link/#step-1-get-your-public_key

没有给出关于如何从客户端的表单中获取 public_token 的指南,尽管它明确指出在客户端公开它是安全的。

您必须阻止表单的默认操作: 有几种方法可以做到这一点,这里有两种 jQuery 和 Vanilla JS:

jQuery

$('#form').submit(function (event) {
    event.preventDefault();
    window.history.back();
});

JS

if (element.addEventListener) {
    element.addEventListener("submit", function(event) {
        event.preventDefault();
        window.history.back();
    }, true);
}
else {
    element.attachEvent('onsubmit', function(event){
        event.preventDefault();
        window.history.back();
    });
}

Angular 您可以将 $event 对象传递给您的方法,并对其调用 $event.preventDefault(),这样默认事件就不会发生:

<a href="#" ng-click="do($event)">Click</a>

// then in your controller.do($event) method
$event.preventDefault()

像这样写一个指令,然后将其注入您的 angular 应用程序。

yourApp.directive('preventDefault', function() {
    return {
        restrict: 'AE',
        link: function(scope, element, attrs) {
            element.on('click', function(e){
                    e.preventDefault();
                });
        }
   };
});

然后在您的表单或您想要停止默认行为的任何 html 标记中添加指令 "prevent-default",例如

<form id="some-id" method="POST" action="/authenticate" prevent-default></form>