Django到了1.2.5版本以上,Ajax POST请求的使用发生了一些改变,咱们还记得前些版本1.2,Django加入了CSRF机制,大大加强了网络请求的安全性,正是由于这点,如今的Django对页面任何POST请求的数据进行跨域攻击保护。当你升级到1.2.5或更高版本后,你会发现之前1.2.4版本的Ajax POST脚本方法都不能用或者出错了,Django官网上提供了一个解决办法,加个JQuery ajaxSend事件,让你之前的Ajax Post脚本能从新正常使用起来。请看代码:html
$('html').ajaxSend(function(event, xhr, settings) { function getCookie ( name ) { var cookieValue = null ; if ( document . cookie && document . cookie != '' ) { var cookies = document . cookie . split ( ';' ); for ( var i = ; i < cookies . length ; i ++ ) { var cookie = jQuery . trim ( cookies [ i ]); // Does this cookie string begin with the name we want? if ( cookie . substring ( , 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' )); } });
转载需注明:baoyalv 原创文章 http://2goo.info/blog/baoyalv/Django/2011/03/12/509 ajax