Django中的Ajax调用失败
Posted
技术标签:
【中文标题】Django中的Ajax调用失败【英文标题】:Ajax call failing in Django 【发布时间】:2012-01-30 10:15:15 【问题描述】:我有以下 ajax 调用来更新模型的特定字段
$("#updateLink").click(function()
var dec_text = $('#desc_text').val();
$.ajax(
type: "POST",
url:"/users/update_desc/",
data:
'val': dec_text,
,
success: function()
$(".display, .edit").toggle();
$("#descText").html(dec_text);
,
error: function()
alert("Error");
,
);
return false;
);
我的看法是这样的
@csrf_exempt
def update_desc(request):
if request.is_ajax():
if request.method == 'POST':
desc_text = request.POST.get('val', False)
if desc_text:
profile = user.profile
profile.desc = desc_text
profile.save()
return_message = "Sent mail"
return HttpResponse(return_message,mimetype='application/javascript')
我经常收到一条错误消息,但我不知道如何解决这个问题。如果问题是由缺少csrf token
引起的,我什至使用csrf_exempt
装饰器来解决问题,但问题仍然存在。
除了一个ajax post
,在我的base
模板中,所有的ajax 调用都失败了。任何人都可以帮助了解这里发生的事情。如果需要,我可以提供更多详细信息。
编辑:
我在我的基本模板中添加了一个包含此https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax 的js
文件,因此这意味着它存在于我的所有模板中。我正在使用 django 1.3 版本。
【问题讨论】:
我预计您仍然会收到 csrf_token 缺失错误。如果是这样,我的答案发布在下面,否则在您使用 csrf_exempt 后说明错误。 实际上我不知道如何得到错误,如您所见,我刚刚在error
回调中发出警报,告诉我我的 ajax 调用失败但它没有告诉我什么错误是。我怎样才能得到错误?
首先,在你的 settings.py 文件中 DEBUG = True。这不会显示您的 ajax 错误,但肯定会显示其他未满足的错误。
其次,下载FireBug。这是一个非常有用的调试工具。在那里你会有一个控制台面板。单击它并重新加载您的页面。这将显示任何失败的脚本。上线并复制错误或在另一个选项卡中打开它。如果是这样,这会将您带到崩溃页面
是的,我已经发送了,在添加您在下面给出的解决方案之前,我得到了这个[30/Dec/2011 13:27:36] "POST /users/update_desc/ HTTP/1.1" 500 94752
现在我根本没有看到正在发出的帖子,所以这意味着下面解决方案没有帮助。你能建议点别的吗。为什么我得到 500,我的 view
有问题吗?
【参考方案1】:
首先,您使用的是 POST,而不是发送 csrf 令牌。尝试显式发送 csrf 令牌,而不是使用装饰器 csrf_exempt。 一种方法是使用我在 data 中所做的。即获取 csrf 令牌(或从您自己的方法中)并将其传递到您的参数中。
$.ajax(
url : url,
type: "POST",
data : csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
dataType : "json",
success: function( data )
// do something
);
【讨论】:
现在什么都没有发生,我只是在 url 的末尾看到一个 # 这意味着return false
没有在事件处理程序中执行
按照上述 cmets 中列出的步骤进行操作。以上是关于Django中的Ajax调用失败的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Ajax GET 调用中的数据值检索到 Django 视图中
Django如何通过单击带有变量的提交按钮从ajax调用views.py中的函数
带有重复 AJAX 调用的 Django 关闭套接字错误 [WinError 10053] 已建立的连接被主机中的软件中止