day19-初识Ajax

一、前言

  之前我们提交页面的时候,页面会刷新,那当然我们输入正确的信息的情况下,这个没有问题,但是有一点的是,我们就不好去验证了,我们想的是,我们数据提交到后台,然后页面不刷新,然后通过一个回调函数来控制,所以我们今天就学习一下ajax,它是jquery里面封装的,用它必须先导入jquery的类库。它就是悄悄的提交到后台,但是页面不刷新。

二、ajax的语法

$.ajax({
    url:"url连接",
    type: "POST/GET",
    data:$('#id').serialize(),//把form表单里面的数据直接打包给后台,当然你用{'k1':'v1','k2':'v2'}也行
    success: function(data){ #返回的数据在data中
        回调函数...
    }
})

这个success后面的function函数:请求发送过去,success后面的函数是不会执行的,它会等到服务端给我返回一点数据的时候,这个时候函数就会被自动触发,这个就是回调函数,返回的数据放在data中。

$.ajax({
    url:'URL',
    data:$("#id").serialize(), #或者是字典{"k1":'v1','k2':[1,2,3],'k3':JSON.stringify({'k1':'v1','k2':'v2'})},如果是value是字典的话,需要序列化成字符串发送给后台,后台反序列化一下
    type:"POST",
    dataType:"JSON",//在jquery内部帮你做序列化的处理,代替了success里面的JSON.parse(data)这一步
    traditional: true, //{'host_list':[1,2,3,4]},jquery内部帮你做处理,可是它处理不了,发到后台是none,所以这边要告诉jquery需要处理
    success: function(obj){ //这样的话,这边就不是data了,而是obj对象
        location.reload() #刷新
       location.href=""  #跳转
    },
    error: function(){
      //发送一个请求,后台没有捕捉到的,发生了一个未知的问题
    }
})

三、具体示例

3.1、添加urls.py

from django.urls import path,re_path
from app01 import views

urlpatterns = [
    re_path('^test_ajax/$',views.test_ajax)
]

3.2、templates模板里面的host.html如下改动:

<a id="ajax_submit" style="display: inline-block;padding: 5px;background: blue;color: white;">悄悄提交</a>

<script>
    $(function(){

        $("#ajax_submit").click(function(){
            $.ajax({
                url:"/test_ajax/",
                type: "POST",
                data:{"hostname":$("#host").val(),"ip":$("#ip").val(),"port":$("#port").val(),"business_id":$("#sel").val()},
                success: function(data){  
                    if(data == "ok"){   //接收到后台数据之后,做一个验证
                        location.reload();  //刷新当前页面
                    }else {
                        alert(data);
                    }
                }
            })
        })
    })
</script>

 如图:

3.3、view.py中的代码

def test_ajax(request):
    # print(request.method,request.GET.get("user"),request.GET.get("pwd"),sep="\t")
    print(request.method,request.POST,sep="\t")
    h = request.POST.get("hostname")
    i = request.POST.get("ip")
    p = request.POST.get("port")
    b = request.POST.get("business_id")
    if h and len(h) > 5:
        models.Host.objects.create(
            hostname=h,
            ip=i,
            port=p,
            business_id=b
        )
        return HttpResponse("ok")  #给前端的sucess的回调函数传入字符串 ok ,传给data
    else:
        return HttpResponse("长小了")

提交不成功如图:

四、总结

  1. ajax是悄悄的提交给后台,但是页面不需要刷新,是为了给前端验证的时候用的。
  2. ajax是封装在jquery里面的,后台验证后通过HttpResponse("str"),返回给回调函数,回调函数通过data接收str字符串
  3. data接收到str需要进行验证,验证完毕成功重新刷新该页面location.reload(),验证失败,则给出相应的提示。

转载于:https://www.cnblogs.com/zhangqigao/articles/8610226.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值