【发布时间】:2013-12-13 11:32:29
【问题描述】:
我对 Ajax 和 Django 还很陌生,我正在尝试向一个名为“update”的函数发送一个简单的 ajax 请求。但我也不希望在发送请求时更改浏览器中的实际 url(例如 www.website.com/page/ 即使使用 ajax 请求也会保持不变)。基本上,当我尝试提交 ajax 请求时,我从服务器收到 403 错误。我相信我的部分问题可能是 urls.py 中的 url 映射...
这是我的 ajax 请求:
$.ajax({
type : "POST",
url : "/page/update/",
data : {
data : somedata,
},
}).done(function(data){
alert(data);
});
这是它应该得到的视图:
def update(request):
if request.is_ajax():
message = "Yes, AJAX!"
else:
message = "Not Ajax"
return HttpResponse(message)
这是我的 urls.py
urlpatterns = patterns('',
url(r'^$', views.index, name='index'),
url(r'^update/$', views.update, name='update'),
)
提前感谢您的帮助。
我对错误和需要包含的错误状态进行了更深入的研究 {% csrf_token %} 发回帖子时。此示例how to get POST data in django 1.3 显示它已放入表单中,但我的请求仅在单击功能上调用
【问题讨论】:
-
那么问题是什么?一件事 - 你在
if request.is_ajax()中的缩进很不正确 -
我刚刚更新了问题,每次尝试提交请求时基本上都会收到404错误
-
那么,
/page/是否为您提供index视图? -
啊,那大概是CSRF保护吧。尝试使用 Ajax GET 请求而不是 POST,如果您只是检索数据,这更合适。如果您确实需要发布,请阅读以下内容:docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
-
@user1186173 现在,使用
@csrf_exempt装饰器。一旦你熟悉了 ajax 请求,你就可以删除装饰器,并以正确的方式进行操作——这是 peter 推荐的