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