Функция успеха не вызывается при завершении вызова AJAX в Django для кнопки «Добавить в избранное» - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь сделать кнопку «Добавить в избранное» в моем приложении с помощью вызова AJAX. Мой фрагмент HTML-кода

        {% if user.is_authenticated %}
                <div id="favDiv"> <a id="favorite" href="/blogs/{{blog.id}}/favorite/"> Add to Favourites </a> </div>
        {% endif %}

JQuery для этого

$("a#favorite").click(function(){

    var link = $(this).attr("href");

    $.ajax({
          type: "POST",
          url: link,
          success: function() 
          { 
            alert("Function succeeded");
            $("#favDiv").html("Favourites");
          },
          error: function()
          {
            alert("Function failed");
          }
    }); 
    return false;
});

Что я хочу сделать, так это то, что когда пользователь нажимает на избранную кнопку, HTML-код внутри div должен быть заменен простым текстом.

Мой views.py содержит

def favorite_blog(request,blog_id):

    blog = get_object_or_404(Entry, pk=blog_id)

    current_user = request.user
    fav = favorite(user=current_user,entry = blog)    
    fav.save()

    if request.is_ajax():    

        return_message = "Set Favourite"
        return HttpResponse(return_message,mimetype='application/javascript')

    else:
        return HttpResponseRedirect(reverse('view_blog', args=(),kwargs={'blog_id': blog.id,})) 

Все работает нормально, когда я нажимаю кнопку, база данных обновляется, однако ни success: function() не выполняется, ни failure: function(), что может быть возможной причиной. У меня есть другой аналогичный скрипт для кнопки «Мне нравится», и он отлично работает.

1 Ответ

2 голосов
/ 14 декабря 2011

Я полагаю, потому что вы возвращаете ответ с помощью mimetype = 'application / javascript'. JQuery ожидает, что сможет выполнить содержимое ответа как javascript, и он не сможет выполнить его тихий анализ.

Так как вы 'возвращая обычный текст, я предлагаю исправить mimetype на 'text / plain'

подсказка отладки: добавьте полный обратный вызов fn и сделайте console.log с аргументами

...
complete: function(jqXHR, textStatus){ 
    console.log(textStatus);
    console.log(jqXHR);
},
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...