2014-05-06 27 views
0

我正在开发使用Django(1.4.2)内的Pinax框架和带条纹的webapp原始文本:Django的AJAX JSON响应出现在浏览器

  1. Django的条纹支付
  2. eldarion- AJAX

我已经得到了一切,除了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似乎是相似的,但没有官方的答案,提交者似乎已经弄明白了(通过评论),但这些建议不适用于我。

详情:

我使用python manage.py runserver器和Firefox中进行测试。

我刚刚开始使用条纹应用程序,并刚刚使用django-stripe-payments的示例在我为我的特定需求量身定制之前开始工作。

我快

我的测试案例包括使用从Django的条纹支付标准的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-支付代码。接下来发生的事情是上面提到的原始JSON。

+0

那么在那个答案中,如果他说它最终会成为一个jQuery问题,那么您的应用使用的是哪个版本的jQuery? –

+0

我确实把它放在那里,但显然不够清楚 - v1.9.1我也试过1.11.0和1.8.3。 – user38845

回答

0

好吧,我解决了它。事实证明,这确实是一个jQuery问题。我在我的应用程序中引用了两个jQuery文件。当我删除第二个,并坚持上面提到的问题时,它就起作用了!我的信用卡详细信息在页面上按预期更新(尽管缓慢)。

因为我使用pinax框架,它自动带有一个jquery引用。它需要在least.This Django的调试工具栏被列入 “base.html文件” 文件中:

{% block script_base %}{% endblock %} 

( “base.html文件” 位于:pinax_theme_bootstrap /模板/ theme_bootstrap)

幸运的是,base.html提供了一个名为“jquery_src”的可重复块,所以在我的“site_base”中。在我的应用程序的HTML”的文件,我刚刚进入向底部以下几点:

{% block jquery_src %}{% endblock %} 

这样取出第二jQuery库

我也用这被认为是在故障的jQuery v1.11.0尝试。 this SO question I mentioned earlier并且它也工作了