【发布时间】:2011-10-07 14:11:16
【问题描述】:
我的 jquery 看起来像这样:
$.ajax({
url:"/process_values/",
type: "POST",
data: {values:['1','2']},
success:function(response){
alert("success: " + response);
},
error:function (xhr, textStatus, thrownError){
alert("xhr status: " + xhr.statusText);
},
});
我的 django 视图如下所示:
@csrf_protect
def process_values(request):
# do stuff
print 'complete'
return HttpResponse("success", mimetype="application/html")
视图正在正确执行,但错误回调总是在它完成时被调用。知道这是为什么吗?
更新:对于那些暗示它是 CSRF 问题的人。不是,我使用标准 javascript 来设置该 cookie,我可以在 django 端的请求中看到令牌。
UPDATE2:我刚刚意识到我的函数中有其他东西调用了这个改变行为的 ajax 调用。我有一个重定向,我使用以下方法编写:
document.location.href="/main/";
当我注释掉这一行时,将调用成功回调。哇,没想到这会有什么不同。有人知道为什么这会导致失败吗?已将此问题移至here,因为这是一个不同的问题。结束这个问题。
【问题讨论】:
-
你能说什么错误?
-
该 HttpResponse 方法是否发送回格式正确的 200(成功)状态码?
-
@Sedat - 我怎样才能得到错误? xhr.statusText 显示“错误”。其他参数均未显示错误消息。没有服务器错误。
-
@Greg 不确定格式正确的 200 状态代码是什么样的。我怎么知道?
-
ZincX,你不需要自己手动形成它。 HttpResponse 将能够以一种或另一种方式处理它;您将不得不深入研究它的 API。但是至少要看看发生了什么,打开像 Firebug 这样的调试工具,转到它的“网络活动”选项卡(在 Firebug 中,简称为“网络”),您将能够看到请求的状态代码。