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

标签 jquery python ajax braintree

这里使用Python和JQuery..

我们之前使用正常的 form.submit(); 提交在 submitHandler验证(JQuery 插件)调用。这已提交到 Braintree 的透明重定向 url,并将重定向设置为我们服务器上的 GET 处理程序。我们进行确认,然后在处理程序中进行另一个重定向。如果提交的数据没有通过 Braintree(比如信用卡不良),那么我们将一些 html 写入 <div id="error">errormessage</div>在我们的处理程序的响应中,这将被插入到用户的页面中。

问题是,如果我们的处理程序中出现错误,这将产生 500 状态代码,一切都会陷入困境,并且用户的页面会出现不良行为。

如果发生的话,我希望能够处理来 self 们的处理程序的 500 响应。

我想我可以使用 statusCode 来做到这一点jQuery 的 AJAX 属性。

这是我尝试过的(在 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 表单提供了许多属性,如下所示:

%form#addcard{"action": braintree_url, "method": "post", "autocomplete": "off", "submittype": "secure", "next": braintree_url, "target": "hidden_iframe")}

编辑:

在阅读了更多有关 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.

最佳答案

好吧...这是 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 Hook iframe 的 load 事件:

$('#braintree-target').on('load', function() {
    var data = $.parseJSON( $(this).contents().text() );
    // Handle response data here
});

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

关于jquery - 如何通过 AJAX 将表单数据提交到 Braintree 透明重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116160/

相关文章:

python - 如何使用 IntelliJ 远程调试 Python?

jQuery ajax 完成 : Is there a way to tell which Javascript function executed the ajax call?

jquery - BlueImp 文件上传失败

python - 我如何比较 Django 中的日期?

python - 使用python,找到总和尽可能接近另一个的数字组合

javascript - 通过 AJAX 加载 Google Maps API,控制台错误

javascript - 拖动div,正确放置并发送ajax请求

javascript - 字符串匹配和不匹配的正则表达式问题

javascript - 单击加载 IFRAME

javascript - IE9中JQuery ajax的奇怪问题