【发布时间】:2011-11-14 00:58:19
【问题描述】:
在这里使用 Python 和 JQuery..
我们之前在验证(JQuery 插件)调用的submitHandler 中使用普通的form.submit(); 提交。这被提交到 Braintree 的透明重定向 url,redirect-to 设置为我们服务器上的 GET 处理程序。我们进行确认,然后在我们的处理程序中进行另一个重定向。如果提交的数据没有通过braintree(比如一张坏信用卡),那么我们在处理程序的响应中将一些html 写入<div id="error">errormessage</div>,并将其插入用户页面。
问题是,如果我们的处理程序出现错误,会产生 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 表单提供一些属性,如下所示:
%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/
由于浏览器安全限制,大多数“Ajax”请求都受同源策略的约束;请求无法从不同的域、子域或协议中成功检索数据。
【问题讨论】:
标签: jquery python ajax braintree