如何通过AJAX将表单数据提交到Braintree透明重定向?

2024-05-14 17:36:48 发布

您现在位置:Python中文网/ 问答频道 /正文

在这里使用Python和JQuery。。在

我们以前在validation(JQuery plugin)调用的submitHandler中使用普通的form.submit();提交。它被提交到Braintree的透明重定向url,重定向设置为服务器上的GET处理程序。我们在处理程序中执行确认,然后执行另一个重定向。如果提交的数据没有通过braintree(比如说一张坏信用卡),那么我们在处理程序的响应中向<div id="error">errormessage</div>写入一些html,并将其插入到用户的页面中。在

问题是如果我们的处理程序中有一个错误,它将产生一个500个状态代码,那么一切都会陷入地狱,并且用户的页面也会出现不受欢迎的行为。在

如果发生这种情况,我希望能够处理处理程序发出的500个响应。在

我想我可以使用jQuery的AJAX的statusCode属性来完成。在

以下是我尝试过的方法(在submitHandler)中:

var data = $(form).serialize();
$.ajax({
  type: 'POST',
  url: braintree_url,
  data: data,
  statusCode: {
    500: function() {
      alert('broked response yo');
    }
  }
});

然后我故意在处理器中提出一个错误来强制500。在

但是我的ajax提交到Braintree的url不起作用。然而,form.submit();工作得很好。在

我做错什么了?我认为表单可以像这样通过AJAX提交并产生相同的结果,这是错误的吗?在

FWIW,我们为html表单提供了许多属性,如下所示:

^{pr2}$

编辑:

在阅读了更多关于ajax的文章之后,我意识到我在这里的设置不起作用的可能原因是它在调用另一个域(Braintree),这违反了同源策略。所以浏览器没有执行。在

发件人:http://api.jquery.com/jQuery.ajax/

Due to browser security restrictions, most "Ajax" requests are subject to the same origin policy; the request can not successfully retrieve data from a different domain, subdomain, or protocol.


Tags: 用户divformurl处理程序datahtml错误
1条回答
网友
1楼 · 发布于 2024-05-14 17:36:48

好吧。。。这是十年前的ajax版本,但对我来说,它的工作非常出色:

使用普通表单提交(不调用$.ajax),但在页面中锁定一个隐藏的iframe:

<form action="<%= Braintree::TransparentRedirect.url %>" method="POST" target="braintree-result">
...
</form>

<iframe name="braintree-result" id="braintree-target" style="display:none;"></iframe>

然后使用jQuery钩住iframe的load事件:

^{pr2}$

然后更改braintree回调URL以返回JSON数据,该数据将在iframe中呈现,以便您可以在客户端处理它。就这样!请注意,此方法假设您将braintree重定向回与当前页面具有相同来源的URL。否则我认为你无法阅读iframe的内容。在

相关问题 更多 >

    热门问题