JS 小demo

1 预览图片

<script>
    // 找到头像input框, 绑定changge事件
    $("id_avatar").change(function () {
        // 创建一个读取文件的对象
        var fileReader = new FileReader();
        // 取到选中的文件夹
        fileReader.readAsDataURL(this.file[0]);
        // 读取文件需要时间
        fileReader.onload = function(){
            // 读取完才执行
            $('#avatar-img').attr('src', fileReader.result);
        }
    })
</script>

一个js小demo(通过iput失去焦点向后端发送ajax请求, 可以实时看看有没有重名之类的)

my_test.html

里面有两种ajxa跨域方式, 虽然注释掉了一种, 而且ajax的url,不写默认是给自己发ajax。当如果写了类似desky/之类域名,会在自己原来的url基础上加,如自己的url是aki,ajax的url是desky/, 则向aki/desky/发送请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/jquery-3.3.1.min.js"></script>
    <script src="/static/setupajax.js"></script>

</head>
<body>
<label for="i1">输入框</label>
{#{% csrf_token %}#}
<input type="text" id="i1">

<script>
    $("#i1").blur(function () {
        let $i1Ele=$(this);
        let name=$i1Ele.val();
        {#let csrfToken=$("[name='csrfmiddlewaretoken']").val();#}
        $i1Ele.next("span").remove();
        $.ajax({
            url: '',
            type: "POST",
            dataType: 'JSON',
            {#data: {"name": name, "csrfmiddlewaretoken":csrfToken},#}
            data: {'name': name},
            success: function (arg) {
                let spanEle=document.createElement("span");
                spanEle.innerText=arg;
                $(spanEle).css("color", "red");
                $i1Ele.after(spanEle);
            }
        })
     } )
</script>
</body>
</html>

后端

注意传给前端ajax的arg, 必须是json格式的,Httpresonse要先序列化, 用Jsonresponse如果传的不是字典,要加safe=False参数

def my_ajax(request):
    if request.method == "POST":
        data = request.POST.get('name')
        print(data)
        import json
        a = json.dumps('adc')
        # return HttpResponse(a)
        return JsonResponse('abd', safe=False)
    return render(request, 'my_test.html')

 

跨域方式

一   jsonp

原理:通过<script>发get请求

jsonp只能发get请求

可以不写jsonpCallback参数

不写jsonpCallback参数时, 相当于向http://127.0.0.1:8008/service/callback=随机字符串  发get请求

有jsonpCallback参数时, 相当于向http://127.0.0.1:8008/service/callback=aki&=随机字符串

前端

<script>
    $('.get_service').click(function () {
        $.ajax({
            url: 'http://127.0.0.1:8008/service/',
            type: 'GET',
            dataType: 'jsonp',
            jsonp: 'callback',
            jsonpCallback: 'aki',
            success: function (data) {
            }
        })
    })
</script>

后端

def service(request):
     func = request.GET.get('callbacks')
     info = {'name': 'desky', 'age': 17}
     return HttpResponse("%s('%s')" % func, json.dumps(info))

二  cors跨域

 

后端

def service(request):
    info = {}
    response = HttpResponse(json.dumps(info))
    response["Access-Control-Allow-Origin"] = "*"
    # "*"也可任意指定网址
    return response

 

前端

正常发ajax就行了

 

全选和全不选

<body>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<input type="checkbox" class="choice">
<input type="checkbox" class="choice_iem">
<input type="checkbox" class="choice_iem">
<input type="checkbox" class="choice_iem">
<script>
    $(".choice").click(function () {
        if ($(this).prop("checked")){
            $(".choice_iem").prop("checked", true)
        }else{
            $(".choice_iem").prop("checked", false)
        }
    })
</script>
</body>

 

三 ajax 跨域

直接<script>引入就行了

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

$.ajaxSetup({
  beforeSend: function (xhr, settings) {
    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
      xhr.setRequestHeader("X-CSRFToken", csrftoken);
    }
  }
});

 

img绑定点击事件持续向后台发送请求

 <img src="/check_code" onclick='ChangeCode();' id='imgCode'>

 scr向127.0.0.1:8888/check_code发送请求

<script type="text/javascript">

    function ChangeCode() {
       var code = document.getElementById('imgCode');
       //   sec 加问号就会再次发送请求
       code.src += '?';
      }
</script>

最让我感到牛B的是每点击一次img就给src加一个?,  还能接着向后台发请求,第一次看这么玩的, 服了

127.0.0.1:8888/check_code?????

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值