Django Ajax POST請求失敗解決辦法

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' )); 
     } 
});
 
把以上的代碼 放在你使用Ajax POST 請求的頁面上。
 
參考文檔:
http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#csrf-ajax
http://docs.djangoproject.com/en/dev/releases/1.3/#csrf-exception-for-ajax-requests

轉載需註明:baoyalv 原創文章 http://2goo.info/blog/baoyalv/Django/2011/03/12/509 ajax

相關文章
相關標籤/搜索