【Django】框架ajax无法调用后台方法问题

来源:互联网 发布:斗鱼qqq的淘宝店是什么 编辑:程序博客网 时间:2024/06/07 06:42

Ajax 无法访问View中的方法

前段时间在搭建Django 框架时候, 遇到了一个问题,就是在 html 页面 写的Ajax 无法请求到views中的后台方法?

  • 这是为什么呢?
  • 主要是之前写的java代码的习惯, 觉得jsp页面也好 ,H5界面也好,请求都大同小异。
<script type="text/javascript">        function init(id,lo) {            $.ajax({                url:"/detail/",                data:{ID:id,load:lo},                type:'POST',                success:function(json){                   var data = $.parseJSON(json);                    if( data ) {                        $.each(data, function (key, value) {                            var st=""                            for(var i=0;i<value.length-1;i++){                                 st += value[i]                                 st +="</br>"                            }                           $("#div1").html(st)                        });                    }                }            });       }</script><body onload="init('{{ID}}','{{load}}')"><div id="div1"></div></body>

urls.py配置信息

urlpatterns = [    # url(r'^admin/', admin.site.urls),    url(r'^show/',views.show),    url(r'^detail/',views.detail),#之前有人告诉楼主r'^detail$/$' 要加个‘$’说是就能请求到,然并卵    #]

最后仔细想想, 我们一般请求 , 前台发送一个请求–>路由拦截–>转发到具体的方法 (java也好 ,Python也好,不过都是这么回事)

想明白这点后, 做了如下测试

  • 路由拦截是否配置有问题 (http://127.0.0.1:8000/detail/)发现是好的,也进方法了
  • 这就说明了不是我们配置的路由问题
  • 那必然是我们ajax 写法不符合Python 规范
  • 经过查阅资料,发现少了如下代码
<script type="text/javascript" src="/static/js/jquery.cookie.js"></script>(当然不能忘记js)<script type="text/javascript">        var csrftoken = $.cookie('csrftoken');        function csrfSafeMethod(method) {            // these HTTP methods do not require CSRF protection            return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));        }        $.ajaxSetup({  //设置ajax发送之前做的操作,在data里面加上一个键值对            beforeSend: function(xhr, settings) {                if (!csrfSafeMethod(settings.type) && !this.crossDomain) {                    xhr.setRequestHeader("X-CSRFToken", csrftoken);                }            }        });        function init(id,lo) {            $.ajax({                url:"/detail/",                data:{ID:id,load:lo},                type:'POST',                success:function(json){                   var data = $.parseJSON(json);                    if( data ) {                        $.each(data, function (key, value) {                            var st=""                            for(var i=0;i<value.length-1;i++){                                 st += value[i]                                 st +="</br>"                            }                           $("#div1").html(st)                        });                    }                }            });       }</script>

如此便解决了, ajax不能调用后台方法的问题!!!