【问题标题】:(Django) Ajax form submit with jquery-forms(Django) 使用 jquery-forms 提交 Ajax 表单
【发布时间】:2011-03-13 12:51:19
【问题描述】:

我正在尝试将 ajax 表单提交添加到我的网页。表单会将用户的电子邮件添加到时事通讯中。我找到了这个解决方案:http://www.tutorialswitch.com/web-development/quick-and-simple-ajax-forms-with-json-responses/ 现在我正在尝试为 django 重写它。

所以我有我的表格,包含在主页上:

    <div id="form-newsletter-message"></div>
    <form action="{% url newsletter_add %}" method="post" class="form-newsletter" id="form-newsletter">
        <input type="text" class="form-text" name="email" />
        <input type="submit" value="Add" class="form-submit" />
    </form>

这是我的 application.js,唯一的变化是表单的名称:

function setupAjaxForm(form_id, form_validations){
    var form = '#' + form_id;
    var form_message = form + '-message';

    var disableSubmit = function(val){
        $(form + ' input[type=submit]').attr('disabled', val);
    };

    $(form).ajaxSend(function(){
        $(form_message).removeClass().addClass('loading').html('Loading...').fadeIn();
    });

    var options = {
        dataType:  'json',
        beforeSubmit: function(){
            if(typeof form_validations == "function" && !form_validations()) {
                return false;
            }
            disableSubmit(true);
        },
        success: function(json){
            $(form_message).hide();
            $(form_message).removeClass().addClass(json.type).html(json.message).fadeIn('slow');
            disableSubmit(false);
            if(json.type == 'success')
                $(form).clearForm();
        }
    };
    $(form).ajaxForm(options);
}
$(document).ready(function() {
    new setupAjaxForm('form-newsletter');
});

网址:

urlpatterns = patterns('',
                    url(r'^newsletter_add/$', 'views.newsletter_add', name="newsletter_add"),
)

现在问题出在视图上。基于示例 .php 函数,我创建了这个:

if request.method == "POST":    
    try:
        e = NewsletterEmails.objects.get(email = request.POST['email'])
        message = _(u"Email already added.")
        type = "success"
    except NewsletterEmails.DoesNotExist:
        logging.debug("nie dodany")
        try:
            e = NewsletterEmails(email = request.POST['email'])
        except DoesNotExist:
            pass
        message = _(u"Email added successfully.")
        type = "success"
        e.save()

结果是当我单击提交按钮时,我得到“正在加载...”文本,然后什么也没有。提交按钮一直被禁用(直到我重新启动浏览器)但我的电子邮件地址被添加了。没有响应并且firebug 显示“500 Internal Server Error”我做错了什么?

【问题讨论】:

    标签: jquery ajax django form-submit


    【解决方案1】:

    只是作为一个想法,我前段时间遇到过类似的问题:http://code.djangoproject.com/ticket/5868

    【讨论】:

      【解决方案2】:

      您的第一步是查看 Ajax 请求发生了什么。我推荐使用带有 Firebug 插件的 Firefox 来调试 Ajax 问题,即使我使用 Chrome 进行常规浏览。在 Firebug 中启用控制台选项卡,然后刷新您的页面。 Ajax 请求应该显示在那里,您可以展开它并查看是否返回了错误页面。使用 Firebug,您可以查看返回的错误页面并找出问题所在。

      【讨论】:

        猜你喜欢
        • 2018-07-22
        • 2017-07-26
        • 2012-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多