我正在尝试使用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()
可能是原因。我有类似按钮的另一个类似的脚本,并且工作正常。
答案 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);
},
...