2013-05-12 40 views
1

我有一些AJAX来轮询每5秒服务器:CSRF使用Ajax轮询

var date = $('article').first().find('time').text(); 
console.log(date); 

setInterval(function() { 
    $.post('pollNewEntries', {'date':date}, newEntrySuccess) 
}, 5000); 

不幸的是,我每次AJAX尝试轮询服务器时得到一个403错误,说明我已经无效的CSRF请求。我之前使用过AJAX,并且在表单中包含了CSRF标记,但是我不确定我会如何处理上述的无格式AJAX请求。

+1

https://docs.djangoproject.com/en/dev/ref/contrib/csrf /#ajax – dm03514 2013-05-12 14:30:58

+1

你为什么使用POST? GET更适合于只从数据库中取出的动作,而不需要CSRF。 – 2013-05-12 14:40:53

+0

因为我需要传递页面上最新文章的日期。可以GET做到这一点? – user1427661 2013-05-12 15:39:09

回答

2

对这个问题的解决方案是Django文档中描述:https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax

此代码添加到您的js的顶部:

$.ajaxSetup({ 
    beforeSend: function(xhr, settings) { 
     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]); 
        // Does this cookie string begin with the name we want? 
        if (cookie.substring(0, name.length + 1) == (name + '=')) { 
         cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
         break; 
        } 
       } 
      } 
      return cookieValue; 
     } 
     if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { 
      // Only send the token to relative URLs i.e. locally. 
      xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); 
     } 
    } 
}); 
0

您需要将csrf标记与您的帖子一起传递数据:

var date = $('article').first().find('time').text(); 
console.log(date); 

setInterval(function() { 
    $.post('pollNewEntries', {'date':date, 'csrfmiddlewaretoken': '{{csrf_token}}'}, newEntrySuccess) 
}, 5000); 
+0

即使它不在HTML模板(这是一个js文件),它会工作吗? – user1427661 2013-05-12 16:02:22

+0

哦,我以为它的模板。但你可以做的一件事就是将'

  • 11. 扩展聊天应用 - 短轮询与长轮询(AJAX,PHP)
  • 12. 彗星VS Ajax轮询
  • 13. jQuery的AJAX PHP长轮询
  • 14. ajax与mysql的长轮询
  • 15. AJAX轮询和循环
  • 16. 轮询冻结,Pebble.js,ajax,node.js
  • 17. 并发AJAX间隔轮询
  • 18. JQuery AJAX轮询语法
  • 19. 24/7 AJAX轮询效率
  • 20. 使用jboss轮询
  • 21. AJAX /反向AJAX:轮询或推?
  • 22. Ajax轮询而另一个Ajax运行
  • 23. 使用jquery在基于ajax的轮询中使用setTimeout问题
  • 24. 我可以用AJAX轮询多快?
  • 25. 通过Ajax调用的轮询机制
  • 26. JQuery + AJAX + Django = CSRF?
  • 27. Ajax轮询停止轮询后互联网断开
  • 28. Jquery Ajax服务器轮询;根据早期的ajax响应轮询服务器
  • 29. 使用Ajax的无效CSRF令牌
  • 30. 使用CSRF codeigniter和ajax登录