Ajax

Ajax

一、概述

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

Ajax最大的优点就是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

Ajax不需要任何浏览器插件,但需要用户允许Javascript在浏览器上执行。

二、应用场景

Ajax技术常见应用场景:根据用户输入的关键字,自动提示检索关键字。还有就是注册时候的用户名的查重,当输入框发现变化时,使用Ajax技术向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来。

  • 整个过程中页面没有刷新,只是刷新页面中的局部位置而已;
  • 当请求发送后,浏览器还可以进行其他操作,无需等待服务器的响应。

三、Ajax格式

$.ajax({            
    url:'',  #url后面跟的是你这个ajax提交数据的路径,向谁提交,不写就是向当前路径提交
    type:'POST',  #type为标定你这个ajax请求的方法
    data:{'k1':'v1'},  #data后面跟的就是你提交给后端的数据
    success:function (arg) {  #success为回调函数,参数arg即后端给你返回的数据,arg是字符串
       #函数体 
    }
})

参数arg都是字符串类型,不过有些是通过对象序列化生成的字符串,这时我们需要反序列成对象,方便我们使用,有两种方法可以实现。

第一种:

$.ajax({            
    url:'',  #url后面跟的是你这个ajax提交数据的路径,向谁提交,不写就是向当前路径提交
    type:'POST',  #type为标定你这个ajax请求的方法
    data:{'k1':'v1'},  #data后面跟的就是你提交给后端的数据
    success:function (arg) {  #success为回调函数,参数arg即后端给你返回的数据,arg是字符串
       var obj = JSON.parse(arg)  #使用JavaScript内置方法,将一个JSON字符串转换为JavaScript对象
       #函数体 
    }
})

第二种:

$.ajax({            
    url:'',  #url后面跟的是你这个ajax提交数据的路径,向谁提交,不写就是向当前路径提交
    type:'POST',  #type为标定你这个ajax请求的方法
    data:{'k1':'v1'},  #data后面跟的就是你提交给后端的数据
    dataType:'JSON' ,
    success:function (arg) {  #success为回调函数,参数arg即后端给你返回的数据,arg是对象
       #函数体 
    }
})

四、$.ajax参数

data参数中的键值对,如果值不为字符串,需要将其转换成字符串类型。

1.列表

$.ajax({
    url: '',
    type: 'GET',
    data: {'k1':[1,2,3,4]},
    dataType: 'JSON',
    traditional: true,
    success:function(arg){
        #函数体
    }
})

2.字典

$.ajax({
    url: '',
    type: 'GET',
    data: {'k1':JSON.stringify({})},   #JSON.stringify()用于将JavaScript对象转换为JSON字符串
    dataType: 'JSON',
    success:function(arg){
        #函数体
    }
})

五、序列化

关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。

1.json.dumps

json.dumps()用于将python对象转换字符串类型。

import json
def del_students(request):
    ret = {'status':True}
    try:
        nid = request.GET.get('nid')
        models.Student.objects.filter(id=nid).delete()
    except Exception as e:
        ret['status'] = False
    return HttpResponse(json.dumps(ret))

2.serializers

def get_data(request):
    ret = {'status':True,'data':None}
    try:
        # user_list = models.UserInfo.objects.all()
        # ret['data'] = serializers.serialize("json",user_list)  #原来user_list是QuerySet对象,内包含对象,不能被dumps,所以转化成json格式的字符串
        #前端
        #var v = JSON.parse(arg.data);
        #console.log(v)

        user_list = models.UserInfo.objects.all().values('id','username')
        ret['data'] = list(user_list)
        #前端
        #console.log(arg.data)

        user_list = models.UserInfo.objects.all().values_list('id','username')
        ret['data'] = list(user_list)
        #前端
        #console.log(arg.data)

    except Exception as e:
        ret['status'] = False
    return HttpResponse(json.dumps(ret))
posted @ 2019-11-13 15:24  流浪代码  阅读(116)  评论(0编辑  收藏  举报