2013-11-27 30 views
1

我很新的Ajax和Django,我试图发送一个简单的ajax请求到一个叫'update'的函数。但是我也不希望发送请求时浏览器中的实际URL发生更改(即使使用ajax请求,示例www.website.com/page/也会保持不变)。基本上,当我尝试提交ajax请求时,我从服务器收到403错误。我相信我的问题的一部分可能是在urls.py URL映射...发送Ajax请求到Django

这是我的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表明它被放置到一个表单中,但是我的请求只在一个点击函数上调用

+1

所以问题是什么 ?有一件事 - 如果request.is_ajax()里面的缩进是相当的关闭 – karthikr

+0

我刚刚更新了这个问题,我基本上每次尝试提交请求时都会收到404错误 – user1186173

+0

因此,'/ page /'给出你'索引'视图? – karthikr

回答

0

你的url在ajax请求中“/ page/update /”与urls.py不匹配。那就是为什么你得到404错误页面。我会告诉你我的行代码,你可以试试这个。

$.ajax({ 
    type: "POST", 
    url: "/update/" 
    data: { 
     csrfmiddlewaretoken: '{{ csrf_token }}', 
     data : somedata, 
    }, 
    success: function(data) { 
     alert(data); 
    }, 
    error: function(xhr, textStatus, errorThrown) { 
     alert("Please report this error: "+errorThrown+xhr.status+xhr.responseText); 
    } 
}); 

/* '{{csrf_token}}' 是专门为django的*/

这是观点:

from django.views.decorators.csrf import csrf_exempt 
@csrf_exempt //You can use or not use choice is left to you 
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'), 
)