2016-05-03 60 views
0

我正在调用Ajax从视图文件写在视图文件代码的函数获取数据:AJAX Django的403禁止错误

def adminRenderConceptGraph(request,group_id,node_id=None): 
    if request.is_ajax() and request.method == "POST": 
    group_name = u'home' 
    if node_id: 
    req_node = node_collection.one({'_id':ObjectId(node_id)}) 
    template = 'ndf/graph_concept.html' 
    variable = RequestContext(request, {'node':req_node }) 
    return render_to_response(template,variable) 

其对应的网址为:url(r'^graph/(?P<node_id>[^/]+)$', 'adminRenderConceptGraph', name='adminRenderConceptGraph'),

Ajax代码使用是:

$.ajax({ 
    type: "POST", 
    url: "/home/ajax/graph/"+ atr, 

    data:{ 
     group_id : '{{groupid}}', 
     node_id : atr 
    }, 
    success: function(result) { 
    alert(result) 

    }, 

}); 

我得到一个403禁止的错误。

+0

显示您的js代码。 –

回答

2

错误是由于csrf令牌丢失。添加一条简单的线帮助。

$.ajax({ 
    type: "POST", 
    url: "/home/ajax/graph/"+ atr, 

    data:{ 
     group_id : '{{groupid}}', 
     csrfmiddlewaretoken: '{{ csrf_token }}', 
     node_id : atr 
    }, 
    success: function(result) { 
    alert(result) 

    }, 

}); 
0

没有你的js代码我只能猜测问题是什么。这很可能是由于CSRF protection。 XHR发送一个没有csrf-token的请求。如果您使用的是jQuery,那么在脚本的开始部分可以提供帮助:

function getCookie(name) { 
    var cookieValue = null; 
    if(document.cookie && document.cookie != '') { 
     var cookies = document.cookie.split(';'); 
     for(var i = 0; i < cookies.length; i++) { 
      var cookie = jQuery.trim(cookies[i]); 
      if(cookie.substring(0, name.length + 1) == (name + '=')) { 
       cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
       break; 
      } 
     } 
    } 
    return cookieValue; 
} 

$.ajaxSetup({ 
    global: true, 
    beforeSend: function(xhr, settings) { 
     if(!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { 
      xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); 
      xhr.setRequestHeader("Content-Type", 'application/x-www-form-urlencoded; charset=UTF-8'); 
     } 
    } 
});