(Django) Отправка формы Ajax с помощью jquery-forms

Я пытаюсь добавить форму 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');
});

URL:

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" Что я делаю не так?


person muntu    schedule 08.07.2010    source источник


Ответы (2)


просто как идея, у меня была аналогичная проблема некоторое время назад: http://code.djangoproject.com/ticket/5868

person sasklacz    schedule 08.07.2010

Ваш первый шаг здесь — посмотреть, что происходит с запросом Ajax. Я рекомендую Firefox с надстройкой Firebug для отладки проблем с Ajax, хотя я использую Chrome для обычного просмотра. Включите вкладку консоли в Firebug и обновите страницу. Там должен появиться запрос Ajax, и вы можете развернуть его и посмотреть, была ли возвращена страница с ошибкой. С помощью Firebug вы можете просмотреть возвращенную страницу ошибки и выяснить, что пошло не так.

person Brandon Konkle    schedule 08.07.2010