2012-05-12 26 views
4

使用jquery1.7.1和django1.3,我試圖讓通過Ajax POST請求,在一些教程代碼我在web和Django的發佈

$(document).ready(function(){ 
    $("#create").click(create_note); 

}); 

var create_note = function() { 
    var title = $("#title").val() 
    var slug = $("#slug").val() 
    if (title != "" && slug != "") { 
    var data = { title:title, slug:slug }; 
    console.log('title='+title); 
    console.log('slug='+slug); 
    var args = { type:"POST", url:"/create/", data:data, complete:done }; 
    $.ajax(args); 
    } 
    else { 
    // display failure 
    } 
    return false; 
}; 

的URL「發現/創建/ 「被映射到Django的觀點

(r'^create/$','notes.views.create_note'), 

def create_note(request): 
    error_msg = u"No POST data sent." 
    if request.method == "POST": 
     post = request.POST.copy() 
     if post.has_key('slug') and post.has_key('title'): 
      slug = post['slug'] 
      if Note.objects.filter(slug=slug).count() > 0: 
       error_msg = u"Slug already in use." 
      else: 
       title = post['title'] 
       new_note = Note.objects.create(title=title,slug=slug) 
       return HttpResponseRedirect(new_note.get_absolute_url()) 
     else: 
      error_msg = u"Insufficient POST data (need 'slug' and 'title'!)" 
    return HttpResponseServerError(error_msg) 

當我點擊提交按鈕,觸發JavaScript函數create_note,我得到一個403錯誤。必須CSRF問題..

我試圖通過修改現成功能

$(document).ready(function(){ 
     $.ajaxSetup({ 
     data: {csrfmiddlewaretoken: '{{ csrf_token }}' }, 
    }); 
     $("#create").click(create_note); 

    }); 

來解決這一點,但它並沒有work..I仍然得到403 error

所以,我試圖修改在ajax通話

var create_note = function() { 
    var data = { title:title, slug:slug ,csrfmiddlewaretoken: '{{ csrf_token }}'}; 
    ... 
    var args = { type:"POST", url:"/create/", data:data, complete:done }; 
    $.ajax(args); 

}; 

數據還是它會導致403錯誤..

請告訴我應該做些什麼來糾正這種情況..我看到有關這個的 django doc,但我很困惑如何使用that.Should我複製整個jQuery(document).ajaxSend(...代碼到我的JavaScript文件..我真的困惑在這裏..

回答

4

你需要(as the document you linked to suggests)複製整個ajaxSend方法...

你不需要修改任何方式 - 它是一個完整的解決方案 - ajaxSend方法實際上是事件處理程序爲ajaxSend事件。它在jQuery中使用.ajax方法時觸發。 See the ajaxSend docs here

在上述文檔中鏈接的方法會將正確的X-CSRFToken標頭附加到您的AJAX請求。然後,您可以使用第一種方法發送AJAX請求。

+0

謝謝@ManseUK,我也遇到過這個建議..http://stackoverflow.com/a/5107878/1291096 – damon

+0

@ damon相同的代碼... – ManseUK

+0

?這並沒有真正回答*其中*是爲了放置ajaxSend代碼的問題。只需在html文件中?在記事本上? – bharal