AJAX

作者: Pope_Li | 来源:发表于2018-11-21 08:57 被阅读0次

    什么是AJAX

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

    AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

    AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(这一特点给用户的感受是在不知不觉中完成请求和响应过程)

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

    • 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;
    • 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。
      示例
      页面输入两个整数,通过AJAX传输到后端计算出结果并返回。
      HTML部分
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    {% load static %}
    <body>
        <div>
            <input type="text" name="username" id="i1">
            <p style="color: red"></p>
        </div>
    
    
        <hr>
        <input type="text" >
        <input type="text">
    
        <script src='{{ static `jquery.js` }}'></script>
    
        <script>
            $('#i1').on('blur', function () {
                $.ajax({
                    url: '/index/',  // 往哪里发请求
                    type: 'POST',  // 请求的方法
                    data: {'username': $('#i1').val()},  // 请求的数据
                    success: function (res) {  // 请求被成功响应之后要做的事儿
                        $('#i1+p').text(res);
                    },
                    error: function (err) {  // 请求未被响应之后要做的事儿
                        alert(err)
                    }
                })
            })
        </script>
    

    views.py

    from django.shortcuts import render, HttpResponse, redirect
    from app01.models import UserInfo
    from django import views
    import json
    from django.http import JsonResponse
    # Create your views here.
    
    
    def index(request):
        if request.method == "POST":
            print(request.POST)
            username = request.POST.get('username')
            # 去数据库检测用户名是否已经存在
            is_exist = UserInfo.objects.filter(username=username)
            if is_exist:
                # 用户名已被注册
                return HttpResponse('用户名已被注册')
            else:
                # 用户名可以注册
                return HttpResponse('用户名可以注册')
        return render(request, 'index.html')
    

    urls.py

    rom django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^index/', views.index),
     ]
    

    AJAX常见应用情景

    搜索引擎根据用户输入的关键字,自动提示检索关键字。

    还有一个很重要的应用场景就是注册时候的用户名的查重。

    其实这里就使用了AJAX技术!当文件框发生了输入变化时,使用AJAX技术向服务器发送一个请求,然后服务器会把查询到的结果响应给浏览器,最后再把后端返回的结果展示出来。

    • 整个过程中页面没有刷新,只是刷新页面中的局部位置而已!

    • 当请求发出后,浏览器还可以进行其他操作,无需等待服务器的响应



      当输入用户名后,把光标移动到其他表单项上时,浏览器会使用AJAX技术向服务器发出请求,服务器会查询名为lemontree7777777的用户是否存在,最终服务器返回true表示名为lemontree7777777的用户已经存在了,浏览器在得到结果后显示“用户名已被注册!”。

    • 整个过程中页面没有刷新,只是局部刷新了;

    • 在请求发出后,浏览器不用等待服务器响应结果就可以进行其他操作;
      AJAX的优缺点
      优点:

    • AJAX使用JavaScript技术向服务器发送异步请求;
    • AJAX请求无须刷新整个页面;
    • 因为服务器响应内容不再是整个页面,而是页面中的部分内容,所以AJAX性能高;

    js实现的AJAX

    最基本的js发送AJAX请求示例:

    <script>
        var i1Ele = document.getElementById("i1");
        i1Ele.onblur = function () {
            // 原生JS创建
            var xmlHttp = new XMLHttpRequest();
            // 设置往哪里提交
            xmlHttp.open("POST", "/index/", true);
            xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            // 取到用户填写的值
            var num = i1Ele.value;
            xmlHttp.send("num="+num);
            // 回调,当请求收到后端的响应之后
            xmlHttp.onreadystatechange = function () {
                if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
                    alert(xmlHttp.responseText);
                }
            };
        };
    </script>
    

    AJAX请求如何设置csrf_token

    官方文档
    通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送。

     // 处理csrftoken问题
            var csrfToken = $('[name="csrfmiddlewaretoken"]').val();
            // 发送ajax请求
            $.ajax({
                url: '/login/',
                type: 'post',
                data: {username: $('#i1').val(), pwd: $('#i2').val(), csrfmiddlewaretoken: csrfToken},
                success: function (res) {
                    // this是谁?
                    console.log(this);
                    console.log(that);
                    console.log('-----------------');
                    console.log(res);
                    // var data = JSON.parse(res);
                    // console.log(data);
                    var data = res;
                    if (data.code === 0){
                        // 登陆成功,跳转到指定的URL
                        location.href = data.next_url
                    }else {
                        // 有错误
                        $("#b1+span").text(data.err_msg)
                    }
                }
            })
        })
    </script>
    

    相关文章

      网友评论

        本文标题:AJAX

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