【问题标题】:How do you send html form data using the action attribute without redirecting to another page?如何使用 action 属性发送 html 表单数据而不重定向到另一个页面?
【发布时间】:2016-06-21 20:59:28
【问题描述】:

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

第 2 步:简单集成

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

-- 名为 public_token 的隐藏输入将附加到此表单 一旦用户完成了链接流程。然后链接将提交 表单,将 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 的指导,尽管它明确指出在客户端公开它是安全的。

【问题讨论】:

  • 来吧伙计们!任何提示或理论?我真的坚持这一点。我敢肯定这是非常简单的事情,但我没有得到。我敢打赌这是 html 或 JS 的特殊之处,我只需要为我指出一些东西。请!
  • 在提交处理程序中使用 event.preventDefault()
  • 您对使用 action 属性非常具体,但对于 angular,您通常在表单上使用 ng-submit="something()"。然后你可以使用 $http 或类似的方式调用/authenticatedocs.angularjs.org/api/ng/directive/ngSubmit
  • 我正在检查所有答案。谢谢!很快就会跟进!
  • 我是否有可能获得 public_token 并将其发送到 Angular $http?

标签: javascript html angularjs plaid


【解决方案1】:

您必须阻止表单的默认操作: 有几种方法可以做到,这里有两种使用 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();
    });
}

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

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

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

【讨论】:

  • 这个答案也不起作用。 ng-click 在提交任何信息之前执行表单。如果您复制并粘贴代码,您将明白我的意思。提交表单会返回一个我需要捕获的对象。使用操作允许我将其发送到后端,但不能不重定向页面。我想在操作后将表单发送到客户端函数,然后使用 angular $http 将其发送到我的服务器。 . .
  • 这个怎么样?您可以直接在评估表达式中调用 $event 方法:ng-click="do(); $event.preventDefault()
  • 我需要你说得更详细一些,我写的大部分 JS 都在服务器上或使用 Angular/下划线功能,所以我不太了解 DOM 或 JS 如何适用于 HTML。
  • &lt;a href="" ng-click="do($event); $event.preventDefault()"&gt;Click&lt;/a&gt; 你的标签中可以有多个 JS/Angular 表达式
  • 如果您在我的问题中复制并粘贴代码,您会明白我的意思,当我说 ng-click 不是这个答案的选项时,正如我所理解的那样,正如您所展示的那样。我需要在不重新加载页面的情况下将 public_token 发送到我的服务器。我最了解的方式是将其发送到 Angular 的 $http 但我不知道如何在以类似于“动作”的方式提交后通过 Angular 获取表单。对不起,这太痛苦了。 . .
【解决方案2】:

像这样写一个指令,然后将它注入你的 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>

【讨论】:

  • 感谢您的回答。我认为这几乎是正确的,但有几点:1)什么是'AE'? 2)您的指令阻止页面更改,但页面实际上只是搅动而不翻身或安顿下来。 3) 我更愿意将表单结果发送到我的角度 $http 但我不知道如何使用 ng-submit;我不认为这是一个选择,所以我没有尝试或建议它。实际上在搅拌了几分钟后它没有工作。
  • 1) 'AE' 简单表示属性和元素。您可以在 Angular 应用程序中使用其中任何一个。请从这里阅读更多内容docs.angularjs.org/guide/directive 2) 不清楚 3) 我不知道您的实际问题。您可以使用“ng-click”而不是“ng-submit”
猜你喜欢
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2016-03-19
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
相关资源
最近更新 更多