2014-08-29 152 views
0

我對AJAX很新,我做了一個簡單的測試,看看我能否獲得AJAX的工作。請求不起作用

如果我按下類似按鈕,服務器應該增加1,並通過提醒用戶響應最新的類似計數。

現在,我收到一條提示,說'錯誤'。它現在正在增加404

看起來像AJAX請求失敗。這是爲什麼發生?

的index.html(局部的)

<div> 
    {{ cmt.body }}<br/> 
    <strong> 
     <span class="like_count" style="color:green">{{cmt.likes}}</span> 
     <button type="button" class="like_btn" data-cmt_id="{{ cmt.id }}">Like</button> 
    </strong> 
</div> 

views.py

def update_like(request): 
    if request.is_ajax(): 
     try: 
      cmt = Comment.objects.get(pk=int(request.POST['cmid'])) 
      cmt.likes += 1 
      cmt.save() 
     except KeyError: 
      return HttpResponse('Error') 

     return HttpResponse(cmt.likes) 

default.js(其中的index.html延伸base.html文件導入)

$(document).ready(function(){ 
     $('.like_btn').on('click', function(){ 
      var comment = $(this).attr('data-cmt_id'); 
      $.ajax({ 
       url: '/comment/update_like', 
       type: "POST", 
       data: { 
        cmid: comment 
       }, 
       success: function(data){ 
        alert("!!"+data); 
       }, 
       error: function(){ 
        alert('error'); 
       } 
      }); 
     }) 
    }); 

加:::

urls.py

urlpatterns = patterns('', 
    (r'^$', index), 

    url(r'^admin/', include(admin.site.urls)), 

    url(r'^comment/update_like/$', update_like) 
) 
+0

不是方法名稱是/ comment/update_like而不是/ comment/like? – SSA 2014-08-29 11:34:08

+0

哇..我是一個白癡....感謝您的注意:)但現在我得到一個彈出與'錯誤' – Dan 2014-08-29 11:36:31

+0

什麼錯誤?編輯你的問題。 – SSA 2014-08-29 11:37:41

回答

0

好吧,我終於設法解決這個問題。

首先感謝mrcrgl。我四處尋找一個調試控制檯,給了我詳細的信息,並證明IE網絡選項卡提供了廣泛的細節:)

最初的問題是通過查看響應主體,這是一個錯誤頁面不放在'/' js網址的結尾。

應該已經

url: '/comment/update_like/' 

不,

url: '/comment/update_like' 

在此之後,我得到了一個禁止403。快速谷歌搜索給了我這個

403 Forbidden error when making an ajax Post request in Django framework

原來這是失蹤的CSRF令牌這是造成問題。 我只是說

@csrf_exempt 

我update_like視圖的頂部和它的作品找到現在;)

0

因此改變URL的工作,因爲它是一個後Ajax請求,但要麼改變它來獲取AJAX請求或者如果你想使用POST請求,傳遞csrf令牌是一個很好的概念。

所以,如果你想要的CSRF令牌在那裏,這是很好的POST AJAX方法,那麼你可以刪除@csrf標籤,並在你的Java腳本編寫一個方法來獲得CSRF令牌作爲建議在這裏

https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

+0

是的。我知道這是一個很好的做法,使用csrf令牌,但在這種情況下,我只是想讓ajax工作,因爲它不會去prd – Dan 2014-08-30 16:00:03

+0

我很高興它的工作,我曾經遇到同樣的問題:)。你也可以嘗試GET。 – user2195058 2014-08-30 16:02:18