1. Priestley

    07.10.2008 15:13

    Нужно реализовать несколько ajax форм, например как на ya.ru форма логина, только с валидацией на клиенте. Подскажите как лучше сделать или может есть готовые решения?
  2. Иван Сагалаев

    07.10.2008 20:21

    Готовых нет, но штука по идее довольно простая. Делаешь вьюху, которая будет собирать POST, валидировать той же формой, что и при нормальном посте, а результат выдавать JSON'ом:

    def validate(request):
        form = SomeForm(request.POST):
        form.is_valid()
        from django.utils.simplejson import dumps
        return HttpResponse(dumps(form.errors), mimetype='application/json')
    

    На клиенте проще всего, наверное, взять jQuery Form plugin, который берет нормальную форму, вешается на ее submit и отсылает ее ajax'ом. В ответ вызывает твою функцию, которая обработает пришедший json. Показывать ошибки можно например так:

    function show_form_errors(form, error_json) 
    {
        clear_form_errors(form);    
        for (name in error_json) {
            var elem = form.find('[@name=' + name + ']');
            elem.parent().append($('<em class="errors">' + data[name] + '</em>'));
        }
        set_submit_buttons_state(form, false);
    }
    
    function clear_form_errors(form) 
    {
        form.find("em.errors").remove();
    }
    
  3. Иван Сагалаев

    07.10.2008 20:23

    Не, не совсем я то написал. Если использовать ajax, то смысл валидации на клиенте пропадает, можно просто к стандартной вьюхе, обрабатывающей форму, приделать выдачу JSON'а, если request.is_ajax().

bbcode