在Django中没有为AJAX调用完成调用“添加到收藏夹按钮”的成功函数

时间:2011-12-13 20:25:55

标签: javascript jquery ajax django

我正在尝试使用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;
});

我想要做的是,当用户点击收藏夹按钮时,div中的html应该被简单文本替换。

我的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 个答案:

答案 0 :(得分:2)

我猜是因为你正在使用mimetype ='application / javascript'返回一个响应,jQuery希望能够以javascript的形式执行响应的内容,并且无法以静默方式解析它。

由于您要返回纯文本,我建议将mimetype修复为“text / plain”

debug hint:添加完整的回调fn并执行console.log参数

...
complete: function(jqXHR, textStatus){ 
    console.log(textStatus);
    console.log(jqXHR);
},
...