2013-11-27 607 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'), 
)