美文网首页
Django Ajax用法

Django Ajax用法

作者: 飞走的光年 | 来源:发表于2020-02-27 09:17 被阅读0次

Ajax详细参数

AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。

同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
AJAX特点:除了异步交互的特点外,还有一个就是:浏览器页面局部刷新;(这一特点给用户的感受是在不知不觉中完成请求和响应过程 就是整网页没有刷新)

js实现的局部刷新:
{% load staticfiles %}

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="{% static 'JS/jquery-3.1.1.js' %}"></script>
</head>
<body>

<button class="send_Ajax">send_Ajax</button>

<script>
      //$.ajax的两种使用方式:

      //$.ajax(settings);
      //$.ajax(url,[settings]);


       $(".send_Ajax").click(function(){

           $.ajax({
               url:"/handle_Ajax/",
               type:"POST",
               data:{username:"Yuan",password:123},

               success:function(data){
                   alert(data)
               },

                 //=================== error============

                error: function (jqXHR, textStatus, err) {

                        // jqXHR: jQuery增强的xhr
                        // textStatus: 请求完成状态
                        // err: 底层通过throw抛出的异常对象,值与错误类型有关
                        console.log(arguments);
                    },

                 //=================== complete============

                complete: function (jqXHR, textStatus) {
                    // jqXHR: jQuery增强的xhr
                    // textStatus: 请求完成状态 success | error
                    console.log('statusCode: %d, statusText: %s', jqXHR.status, jqXHR.statusText);
                    console.log('textStatus: %s', textStatus);
                },

                //=================== statusCode============
                statusCode: {
                    '403': function (jqXHR, textStatus, err) {
                        console.log(arguments);  //注意:后端模拟errror方式:HttpResponse.status_code=500
                     },

                    '400': function () {
                    }
                }

           })

       })

</script>
</body>
</html>
无参数的ajsx
<body>


<button type="button" class="b1">点我</button>

<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js "></script>
<script>
    $('.b1').click(function () {
        {#        alert('aa')#}
        {#    })#}
    #触发ajsx事件
        $.ajax({  #导入ajax模块
            url: '/app01/ajax_handle/',  #要走的地址  相对地址,  在 项目中的url 设置
            type: 'get',   #执行的方法  一般是get的话不用写
            success: function (data) {  ajsa 请求得到的结果在这里接收  并在这里处理
                {#   data 是返回给这边的参数  当执行成功(能够正常返回的时候)的时候 执行这个回调函数 #}
                console.log(data)

            },
            error: function () {
                {#            当有错误的时候执行这个函数中的内容#}
            }
        })
    })


</script>
</body>
$.ajax参数
请求参数
######################------------data---------################

       data: 当前ajax请求要携带的数据,是一个json的object对象,ajax方法就会默认地把它编码成某种格式
             (urlencoded:?a=1&b=2)发送给服务端;此外,ajax默认以get方式发送请求。

             function testData() {
               $.ajax("/test",{     //此时的data是一个json形式的对象
                  data:{
                    a:1,    #a数据的名字是自己命名的和HTML上的数据无关,在view含数中取数据也要用这个名字
                    b:2
                  }
               });                   //?a=1&b=2
######################------------processData---------################

processData:声明当前的data数据是否进行转码或预处理,默认为true,即预处理;if为false,
             那么对data:{a:1,b:2}会调用json对象的toString()方法,即{a:1,b:2}.toString()
             ,最后得到一个[object,Object]形式的结果。
            
######################------------contentType---------################

contentType:默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。
             用来指明当前请求的数据编码格式;urlencoded:?a=1&b=2;如果想以其他方式提交数据,
             比如contentType:"application/json",即向服务器发送一个json字符串:
               $.ajax("/ajax_get",{
             
                  data:JSON.stringify({
                       a:22,
                       b:33
                   }),
                   contentType:"application/json",  写在这里
                   type:"POST",  默认是get  这里POST可大写可小写
             
               });                          //{a: 22, b: 33}

             注意:contentType:"application/json"一旦设定,data必须是json字符串,不能是json对象

             views.py:   json.loads(request.body.decode("utf8"))


######################------------traditional---------################

traditional:一般是我们的data数据有数组时会用到 :data:{a:22,b:33,c:["x","y"]},
              traditional为false会对数据进行深层次迭代;
响应参数

dataType: 预期服务器返回的数据类型,服务器端返回的数据会根据这个值解析后,传递给回调函数。
默认不需要显性指定这个属性,ajax会根据服务器返回的content Type来进行转换;
比如我们的服务器响应的content Type为json格式,这时ajax方法就会对响应的内容
进行一个json格式的转换,if转换成功,我们在success的回调函数里就会得到一个json格式
的对象;转换失败就会触发error这个回调函数。如果我们明确地指定目标类型,就可以使用
data Type。
dataType的可用值:html|xml|json|text|script
见下dataType实例

from django.shortcuts import render,HttpResponse
from django.views.decorators.csrf import csrf_exempt
# Create your views here.

import json

def login(request):

    return render(request,'Ajax.html')


def ajax_get(request):

    l=['alex','little alex']
    dic={"name":"alex","pwd":123}

    #return HttpResponse(l)      #元素直接转成字符串alexlittle alex
    #return HttpResponse(dic)    #字典的键直接转成字符串namepwd
    return HttpResponse(json.dumps(l))
    return HttpResponse(json.dumps(dic))# 传到前端的是json字符串,要想使用,需要JSON.parse(data)

//---------------------------------------------------
    function testData() {

        $.ajax('ajax_get', {
           success: function (data) {
           console.log(data);
           console.log(typeof(data));
           //console.log(data.name);
           //JSON.parse(data);
           //console.log(data.name);
                                     },
           //dataType:"json",
                            }
                       )}

注解:Response Headers的content Type为text/html,所以返回的是String;但如果我们想要一个json对象
    设定dataType:"json"即可,相当于告诉ajax方法把服务器返回的数据转成json对象发送到前端.结果为object
    当然,
        return HttpResponse(json.dumps(a),content_type="application/json")

    这样就不需要设定dataType:"json"了。
    content_type="application/json"和content_type="json"是一样的!
csrf跨站请求伪造

实例 计算输入的值返回值结果

输入框
<input id="b3" type="text" >+<input id="b4" type="text">=<input id="b5" type="text"><input id="cal" type="button" value="计算">

<script>

  $('#cal').click(function(){
        $.ajax({
            url:'/app01/cal/',            类型是  type:'get'   可以省略不写   是post的时候要写上
            data:{'num1':$('#b3').val(),'num2':$('#b4').val()},  拼一个字典传过去,  所以在input中不用设置name  直接穿
            success:function(data){
                console.log(data);
                $('#b5').val(data);   #获取计算的结果,返回给 b5中作为结果
            }
        })

    });

</script>

校验用户名是否纯在

检验用户名是否存在
{% csrf_token %}   #注意这一项必须写上,否则无法提交,因为中间件会检验是否有这个csrf的键值对

<p>校验用户</p>
<input type="text" id="b6">
<p></p>

<script src='jquery模块地址'  ></script>

<script>

   $('#b6').blur(function() {
         var a = $('#b6').val();
      {#  判断a中的信息   如果有值的时候,证明用户输入信息了,这时候走post类型#}
         if (a) {
             $.ajax({
                 url: '/app01/test_user/',  #要走的url  相对路径 省去前边的127.0.0.1:8000
                 type: 'post',
                 data:{'user':$('#b6').val(),'csrfmiddlewaretoken':$("[name='csrfmiddlewaretoken']").val()},
        {#  传入的data要含有csrf中的键值对    csrf的值是动态获取的因为接收端  经过中间件会校验是否含有csrf的键值对 #}
                 success: function (data) {
    {# 接收返回的结果,在下面显示出来#}
                     $('#b6').next().text(data).css('color','red')
                 }
             })
         }
      {# 当为空时走另一个  #}
         else {
             $.ajax({
                 url: '/app01/noneirong/',
                 type: 'get',
                 success: function (data) {
                     
                     $('#b6').next().text(data).css('color','red')

                 }

             });
         }
     })

</script>
输入校验用户名
用户名被使用

立即跳转命令

在js中写上这行代码当执行到这儿时候就可以立即跳转到相应的地址
location.href='https://www.baidu.com/'

相关文章

网友评论

      本文标题:Django Ajax用法

      本文链接:https://www.haomeiwen.com/subject/tssichtx.html