2011-07-09 79 views
1

我有一個名爲vote的Django視圖。它受@login_required裝飾器保護,在正常使用中工作得很好。Django ajax視圖csrf失敗,500錯誤

我決定這將是一個有價值的主意,開始尋找到Ajax和JavaScript,使系統更加動態的,所以我實現類似下面的我第一次嘗試:

$(function() { 
     $(".vote").click(vote); 
}); 

var vote = function() { 
      pk = $(this).attr('pk'); 

      $.ajax({ 
       type: "POST", 
       data: "pk=" + $(this).attr("pk"), 
       url: "/link/" + $(this).attr("pk") + "/vote/", 
       }); 
     }; 

成功地職位,正確的網址。當我用螢火蟲看輸出時,我發現我得到500個錯誤。我已將從https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax截取的內容包含在我的網頁中,我認爲這將解決CSRF問題,但似乎沒有這樣做。

想知道我是否失去了明顯的東西!

謝謝!

+0

如果您包含Firebug中顯示的錯誤和回溯,會有幫助。 –

+0

我發現了我現在犯的錯誤,愚蠢地錯過了Firebug輸出中的一行,致歉! – jvc26

+0

你可以看看http://stackoverflow.com/questions/6506897/csrf-token-missing-or-incorrect-while-post-parameter-via-ajax-in-django – brsbilgic

回答

0

原來,我解決了,這是整理的方式上面:

var vote = function() { 
     pk = $(this).attr('pk'); 

     data = { 
      'pk': pk 
     }; 

     $.ajax({ 
      type: "POST", 
      data: data, 
      url: "/link/" + pk + "/vote/", 
      }); 
    }; 

因此整理,然後我檢查了看法,並發現它不拉正確的價值出來DataDict的通過ajax傳遞給它,這是500錯誤來自哪裏。

我以前曾遇到過由於CSRF問題403,對於那些想知道如何解決這個問題,我只是用在上面的問題中提到的腳本,在/靜態/ JS保存在「csrf.js」文件/我的應用程序的目錄,然後將其作爲其中一個腳本,然後解決該問題。