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

相关文章
相关标签/搜索