我正在Pinax框架内使用Django(1.4.2)开发Stripe webapp并使用:
除非ajax响应(采用JSON格式)似乎没有被任何ajax回调处理,否则我已经完成了所有工作,因此在浏览器中显示为原始JSON数据:
{"html": "\n\n<div class=\"change-card\">\n <h2>Current Card</h2>\n <p class=\"lead\">\n \n Current card on file is a <strong>Visa</strong>\n ending in the digits <strong>4242</strong>.\n \n </p>\n \n \n \n <form action=\"/payments/a/change/card/\" data-stripe-key=\"\" class=\"form ajax\" data-replace-closest=\".change-card\" method=\"POST\">\n <div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='<>' /></div>\n <input name=\"stripe_token\" type=\"hidden\" />\n <a href=\"\" class=\"btn btn-primary change-card\">Change Card</a>\n </form>\n</div>\n"}
This SO question似乎是相似的,但没有正式答案,提交者似乎已经弄明白了(通过评论),但这些建议对我不起作用。
详细说明:
我在Chrome和Firefox中使用python manage.py runserver
进行测试。
我刚刚开始使用条纹应用程序,刚刚使用django-stripe-payments中的示例来定制我的特定需求。
我正在运行的测试用例涉及使用django-stripe-payments的标准ajax表单来更改存储的信用卡:
<form action="{% url 'payments_ajax_change_card' %}" data-stripe-key="{{ STRIPE_PUBLIC_KEY }}" class="form ajax" data-replace-closest=".change-card" method="POST">
{% csrf_token %}
<input name="stripe_token" type="hidden" />
<a href="" class="btn btn-primary change-card">{% if request.user.customer.card_kind %}Change{% else %}Add{% endif %} Card</a>
</form>
我的基本模板中有一些javascript被调用并显示条带形式以输入卡片详细信息 - 选择“更改卡片”按钮时。我不认为这是错误的 - 我直接从here。
我上面有以下功能:
<script src="{% static "js/jquery-1.9.1.min.js" %}"></script>
<script src="//checkout.stripe.com/v2/checkout.js"></script>
以及
<script src="{% static "js/eldarion-ajax.min.js" %}"></script>
在返回令牌(以及后续表单提交事件)之后,将执行以下视图代码:
@require_POST
@login_required
def change_card(request):
try:
customer = request.user.customer
send_invoice = customer.card_fingerprint == ""
customer.update_card(
request.POST.get("stripe_token")
)
if send_invoice:
customer.send_invoice()
customer.retry_unpaid_invoices()
data = {}
except stripe.CardError, e:
data = {"error": e.message}
return _ajax_response(request, "payments/_change_card_form.html", **data)
再次......这是开箱即用的django-stripe-payment代码。接下来发生的事情是如上所述的原始JSON。
答案 0 :(得分:0)
好的,我解决了。事实证明这确实是一个jQuery问题。我在我的应用程序中引用了两个jQuery文件。当我删除第二个,并坚持上面问题中提到的那个,它工作了!我的信用卡详细信息在页面上按预期更新(尽管速度很慢)。
因为我使用的是pinax框架,所以它会自动附带一个jquery引用。它至少是Django调试工具栏所必需的。这包含在&#34; base.html&#34;文件里面:
{% block script_base %}{% endblock %}
(&#34; base.html&#34;位于此处:pinax_theme_bootstrap / templates / theme_bootstrap)
幸运的是,base.html提供了一个名为&#34; jquery_src&#34;的over-ridable块,所以在我的&#34; site_base.html&#34;在我的应用程序文件中,我刚刚在底部输入了以下内容:
{% block jquery_src %}{% endblock %}
这删除了第二个jQuery库。
我也尝试过使用jQuery v1.11.0,这被认为是this SO question I mentioned earlier中的错误,它也有效。