zoukankan      html  css  js  c++  java
  • Django ajax方法提交表单,及后端接受数据

    前台代码:

     1 {% block content %}
     2         <div class="wrapper wrapper-content">
     3             <div class="blog-content">
     4                 {% for blog in blog %}
     5                 <form id="formid" >
     6                     {% csrf_token %}
     7                     <div class="edit-title">
     8                         <b>标题</b>
     9                         <br>
    10                         <input name="id-blog" id="blog-id" type="hidden" value={{blog.id}}>
    11                         <input name="title" type="text" id="blog-title" value={{blog.title}}>
    12                     </div>
    13                     <div class="edit-content">
    14                         <b>正文</b>
    15                         <textarea name="body" id="blog-body">{{blog.body}}</textarea>
    16                     </div>
    17                     <div>
    18                         <!--<input type="submit" value="取消">-->
    19                         <button type="button" id="submit" >保存</button>
    20                     </div>
    21                 </form>
    22                 {% endfor %}
    23             </div>

    js代码:

     1 <!--ajax提交表单-->
     2     <script type="text/javascript">
     3 
     4        $(function(){
     5         $('#submit').on('click', function(){
     6             var id = $("#blog-id").val()
     7             var title = $("#blog-title").val()
     8             <!--var body = $("#blog-body").val()-->body是tinymce富文本编辑器,不能这样获取
     9             var body= tinyMCE.getInstanceById('blog-body').getBody().innerHTML;//谷歌中可以获取到body,火狐获取不到
    10 
    11             $.ajax({
    12                 cache: false,
    13                 type: "POST",
    14                 url:"/sub_article/",
    15                 data:{'title': title, 'body': body,'blogId':id},
    16                 dataType:"json",
    17                 async: true,
    18                 beforeSend:function(xhr, settings){
    19                 xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");
    20             },
    21             <!--回调函数success的data和上面的传如参数data不是一个-->
    22                 success: function(data) {
    23                     if(data.status == 'success'){
    24                         console.log(data)
    25                         alert("提交成功");
    26                          <!--window.location.reload();-->
    27                     }else {
    28                         alert("fail");
    29                     }
    30                 },
    31             });
    32         });
    33     })
    34     </script>

    views:

     1 def sub_article(request):
     2     # if request.is_ajax:
     3     if request.method == 'POST':
     4         # 获取ajax传过来的参数值
     5         data = request.POST
     6         id = data.get('blogId')
     7         print 'id:%s' % id
     8         title = data.get('title')
     9         body = data.get('body')
    10         # body = request.POST.get("blog-body")#此种方式不能获取到值
    11         print "title:%s" % title
    12         print "body:%s" % body
    13         BlogPost.objects.filter(id=int(id)).update(title=title)
    14         BlogPost.objects.filter(id=int(id)).update(body=body) # 更改数据
    15         # BlogPost.objects.create(title=title)
    16         # BlogPost.objects.create(body=body)#提交时插入两条半截数据很可能是这里分开执行引起的,需要通过id来准确定位修改哪条数据
    17         return HttpResponse('{"status":"success"}', content_type='application/json')
    18     else:
    19         return HttpResponse('{"status":"fail", "msg":"fail hhahh"}', content_type='application/json')

    接收参数

    1.GET 方式 

    $.ajax({ 
    url:'/hello/getTest', 
    type:'GET', 
    data:{'a':3333,'b':444}, 
    success:function(data){ 
    alert(data.message); 
    } 
    }) 

    views->参数解析和用数据字典的方式返回json 数据(跨域名请求数据,则使用 jsonp字符串)

    ```
    def getTest(request):
    data = request.GET
    print(data)
    a = data.get('a')
    b = data.get('b')
    response_data = {}
    response_data['result'] = 's'
    response_data['message'] = a+b
    return HttpResponse(json.dumps(response_data), content_type="application/json")
    ```
    
         function postTest() {
            $.ajax({
                url:'/hello/postTest',
                type:'POST',
                data:{'a':3333,'b':444},
                success:function(data){
                    alert(data.message);
                }
            })
        }

    views-> 引入from django.views.decorators.csrf import csrf_exempt,并且增加注解@csrf_exempt,目的是避开CSRF检查

        @csrf_exempt
        def postTest(request):
            data = request.POST
            print(data)
            a = data.get('a')
            b = data.get('b')
            response_data = {}
            response_data['result'] = 's'
            response_data['message'] = a+b
            return JsonResponse(response_data)

    注意点:

    1. post 方式有避开CSRF检查,具体不回避CSRF检查的方式需要再研究
    2. 返回Json的方式有两种
    <!--ajax提交表单-->
    <script type="text/javascript">

    $(function(){
    $('#submit').on('click', function(){
    var id = $("#blog-id").val()
    var title = $("#blog-title").val()
    <!--var body = $("#blog-body").val()-->body是tinymce富文本编辑器,不能这样获取
    var body= tinyMCE.getInstanceById('blog-body').getBody().innerHTML;//谷歌中可以获取到

    $.ajax({
    cache: false,
    type: "POST",
    url:"/sub_article/",
    data:{'title': title, 'body': body,'blogId':id},
    dataType:"json",
    async: true,
    beforeSend:function(xhr, settings){
    xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}");
    },
    <!--回调函数success的data和上面的传如参数data不是一个-->
    success: function(data) {
    if(data.status == 'success'){
    console.log(data)
    alert("提交成功");
    <!--window.location.reload();-->
    }else {
    alert("fail");
    }
    },
    });
    });
    })
    </script>
  • 相关阅读:
    Windows server 2016 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同。”
    Windows Server 2016 辅助域控制器搭建
    Windows Server 2016 主域控制器搭建
    Net Framework 4.7.2 覆盖 Net Framework 4.5 解决办法
    SQL SERVER 2012更改默认的端口号为1772
    Windows下彻底卸载删除SQL Serever2012
    在Windows Server2016中安装SQL Server2016
    SQL Server 创建索引
    C#控制台或应用程序中两个多个Main()方法的设置
    Icon cache rebuilding with Delphi(Delphi 清除Windows 图标缓存源代码)
  • 原文地址:https://www.cnblogs.com/gcgc/p/9471736.html
Copyright © 2011-2022 走看看