пустые данные от вызова Ajax - PullRequest
       2

пустые данные от вызова Ajax

1 голос
/ 22 декабря 2010

Переменная data ничего не возвращает, когда должна возвращать «OK» или «EXISTS».

У меня есть шаблон с эффектом наложения. Шаблон дохода.html имеет форму и кнопку «Добавить новую категорию», при нажатии на которую открывается новое окно (эффект наложения) с крошечной формой.

income.html:

(document).ready(function(){ 
$("#new_cat").live("click", ( function() {      
    var cat_name = $("#nc").val();
    if (cat_name) {
        $.get("/cashflow/new_cat/0/", { name: cat_name, account: "{{ account }}" },
          function(data){
            if (data == "OK") {
                $("#id_category").val(cat_name);
            }
            if (data == "EXISTS") {
                var error = "The category already exists";
                alert(error);
            }
          });
    }
    else {
         var error = "Please enter a name";
         alert(error);
    }
}))  
});
</script>
...

<form>{% csrf_token %}
       <label for="name">Name:</label><input type="text" id="nc" />
       <input type="submit" value="Submit" id="new_cat" />
</form>

views.py:

@login_required
def income(request, account_name): 
    account = account_name
    if request.method == 'POST':
        form = TransForm(user=request.user, data=request.POST)
        if form.is_valid():
            income = form.save(commit=False)
            income.type = 0
            income.account = Account.objects.get(
                            name = account_name,
                            user = request.user)
            income.name = form.cleaned_data['name']
            income.category = form.cleaned_data['category']
            income.save()
            uri = ("/cashflow/account/%s") % str(account_name)
            return HttpResponseRedirect(uri)

    else:
        form = TransForm(user=request.user)

    context = {
          'TransForm': form,
          'type': '0',
          'account': account, 
    }
    return render_to_response(
        'cashflow/income.html',
        context,
        context_instance = RequestContext(request),
    )

def new_cat(request, type):
    if request.method == u'GET':
        GET = request.GET
        if GET.has_key(u'name'):
            name = request.GET[u'name']
            account = request.GET[u'account']
            c = Category.objects.filter(name=name, account=account)
            if c:
                s = "EXISTS"
            else:
                c = Category(name = name, user = request.user, 
                        type = type, account = account)
                c.save()
                s = "OK"

    return HttpResponse(s)

Редактировать: Отладочная информация

> ../cashflow/views.py(765)new_cat()-><django....xa507b0c>
-> return HttpResponse(message)
(Pdb) p message
'EXISTS'
(Pdb) n
> ../site-packages/django/core/handlers/base.py(112)get_response()
-> if response is None:
 p response.content
'EXISTS'
(Pdb) p response.status_code
200

Странно то, что когда я хочу отладить, наложения отображаются во время отладки, а не после. Вот почему я думаю, что это ошибка JS. Я забыл сказать, что категория создана и правильно сохранена в БД.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2010

Вы проверили на наличие ошибок JavaScript?

Мне кажется, что {{ account }} - это account_name в представлении, и если имя что-либо означает, это, скорее всего, строка.

В вашем шаблоне ajax вы предоставляете {{ account }} напрямую без кавычек, поэтому он должен выдать ошибку javascript за неопределенность.

Кроме того, в этой ситуации я всегда отлаживал бы немного больше в вашем вызове ajax. Добавьте pdb.set_trace () и посмотрите, что делает код при отправке запроса. Где он умирает?

Вы можете буквально пройтись по коду, когда он проверяет GET, ищет ключ account, определяет ли он когда-либо переменную s.

0 голосов
/ 22 декабря 2010

Вы уверены, что AJAX-вызов работает правильно? Добавьте обработчик ошибок в $.get.

http://api.jquery.com/jQuery.ajax/

Или общий обработчик ошибок AJAX:

http://api.jquery.com/ajaxError/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...