• ajax


    概述

    对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。

    1、传统的Web应用

    一个简单操作需要重新加载全局数据

    2、AJAX

    AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案。

    • 异步的JavaScript:
      使用 【JavaScript语言】 以及 相关【浏览器提供类库】 的功能向服务端发送请求,当服务端处理完请求之后,【自动执行某个JavaScript的回调函数】。
      PS:以上请求和响应的整个过程是【偷偷】进行的,页面上无任何感知。
    • XML
      XML是一种标记语言,是Ajax在和后台交互时传输数据的格式之一

    利用AJAX可以做:
    1、注册时,输入用户名自动检测用户是否已经存在。
    2、登陆时,提示用户名密码错误
    3、删除数据行时,将行ID发送到后台,后台在数据库中删除,数据库删除成功后,在页面DOM中将数据行也删除。

    原生ajax上传数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input type="text"/>
        <input type="button" value="ajax1" onclick="ajax1()"/>
    
        <script>
            function getXHR(){
                var xhr = null;
                if(XMLHttpRequest){
                    xhr = new XMLHttpRequest();
                }else{
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                }
                return xhr;
    
            }#兼容
            function ajax1() {
                var xhr = getXHR();
                xhr.open('POST','/ajax_json/');
                xhr.onreadystatechange = function () {
                    if(xhr.readyState == 4){
                        //接收完毕
                        console.log(xhr.responseText);
                    }
                };
                xhr.setRequestHeader('k1','v1');
                xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8');
                xhr.send("name=root;pwd=123");
    
            }
    </script>
    </body>
    </html>

    jquery ajax

    
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Title</title>
    </head>
    <body>
    <input type="text"/>
    <input type="button" value="ajax1" onclick="ajax1()"/>
    <script>
    function ajax1() {
    $.ajax({
    'url':'/ajax_json',
    'type':'POST',
    'data':{'k1':'v1'},
    success: function (arg) {
    console.log(arg)
    }
    })

    }
    </script>
    </body>
    </html>
     

    伪类ajax

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form action="/ajax_json/" method="POST" target="if1">
            <iframe class="if1" name="if1"></iframe>
            <input type="text" name="username"/>
            <input type="submit" value="提交" onclick="submitForm();"/>
        </form>
        <script>function submitForm() {
                $('#if1').load(function () {
                    var text = $('#if1').contents().find('body').text();
                    var obj  = JSON.parse(text)
                })
            }
        </script>
    </body>
    </html>

    views.py

    def ajax_json(request):
        print(request.POST)
        ret = {'data':request.POST.get('username'),'status':True}
        return HttpResponse(json.dumps(ret))

    上传文件

    原生ajax(依赖FormData)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <style>
        .upload{
            display: inline-block;
            background-color: aquamarine;
            text-align: center;
            line-height: 50px;
            position: absolute;
            top: 0;
            bottom: 0;
            right: 0;
            left: 0;
            z-index: 90;
        }
        .file{
            width: 100px;height: 50px;opacity: 0;
            position: absolute;
            top: 0;
            bottom: 0;
            right: 0;
            left: 0;
            z-index: 100;
        }
    </style>
    <body>
        <div style="position: relative; 100px;height: 50px">
            <input class="file" type="file" id="fafafa" name="afafaf"/>
            <a class="upload">上传</a>
        </div>
        <input type="button" value="提交" onclick="xhrSubmit();"/>
        <hr/>
    
        <script src="/static/jquery-1.12.4.js"></script>
        <script>function xhrSubmit() {
                var file_obj = document.getElementById('fafafa').files[0];
                var fd = new FormData();
                fd.append('fafa',file_obj);
                fd.append('username','root');
                xhr = new XMLHttpRequest();
                xhr.open('POST','/upload_file/');
                xhr.onreadystatechange = function () {
                    if(xhr.readyState == 4){
                        //接收完毕
                        console.log(xhr.responseText);
                    }
                };
                xhr.send(fd);
            }
    
    
    
        </script>
    </body>
    </html>

    jquery上传文件(依赖FormData)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <style>
        .upload{
            display: inline-block;
            background-color: aquamarine;
            text-align: center;
            line-height: 50px;
            position: absolute;
            top: 0;
            bottom: 0;
            right: 0;
            left: 0;
            z-index: 90;
        }
        .file{
            width: 100px;height: 50px;opacity: 0;
            position: absolute;
            top: 0;
            bottom: 0;
            right: 0;
            left: 0;
            z-index: 100;
        }
    </style>
    <body>
        <div style="position: relative; 100px;height: 50px">
            <input class="file" type="file" id="fafafa" name="afafaf"/>
            <a class="upload">上传</a>
        </div>
        <input type="button" value="提交2" onclick="jqSubmit();"/>
        <hr/>
        <script src="/static/jquery-1.12.4.js"></script>
        <script>function jqSubmit() {
                var file_obj = document.getElementById('fafafa').files[0];
                var fd = new FormData();
                fd.append('fafa',file_obj);
                fd.append('username','root');
                $.ajax({
                    url:'/upload_file/',
                    type:'POST',
                    data:fd,
                    processData:false,
                    contentType:false,
                    success:function (arg) {
                        console.log(arg)
                    }
                })
            }</script>
    </body>
    </html>

    iframe上传文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <style>
        .upload{
            display: inline-block;
            background-color: aquamarine;
            text-align: center;
            line-height: 50px;
            position: absolute;
            top: 0;
            bottom: 0;
            right: 0;
            left: 0;
            z-index: 90;
        }
        .file{
            width: 100px;height: 50px;opacity: 0;
            position: absolute;
            top: 0;
            bottom: 0;
            right: 0;
            left: 0;
            z-index: 100;
        }
    </style>
    <body>
        <div style="position: relative; 100px;height: 50px">
            <input class="file" type="file" id="fafafa" name="afafaf"/>
            <a class="upload">上传</a>
        </div>
        <form action="/upload_file/" method="POST" enctype="multipart/form-data" target="ifm1">#这里加上target等于ifame的id
            <iframe id="ifm1" name="ifm1"></iframe>
            <input type="file" name="fafa"/>
            <input type="submit" onclick="iframeSubmit();" value="Form提交"/>
    
        </form>
        <script src="/static/jquery-1.12.4.js"></script>
        <script>
            function iframeSubmit() {
                $('#ifm1').load(function () {
                    var text = $('#ifm1').contents().find('body').text();
                    var obj = JSON.parse(text);
                    console.log(obj);
                })
            }</script>
    </body>
    </html>

    views.py

    def upload_file(request):
        username = request.POST.get('username')
        file = request.FILES.get('fafa')
        print(username,file)
        with open(file.name,'wb') as f:
            for line in file.chunks():
                f.write(line)
        return HttpResponse('ok')

    JSONP跨域请求(一种请求方式)

    由于浏览器具有同源策略,跨域访问时会阻止
    解决办法:

      不阻止<script>
      创建script标签
      src=远程地址

    注意:

      返回的数据必须是js格式
      只能发GET请求

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <input type="button" onclick="Jsonp();"  value='提交'/>
        <script>
            function Jsonp() {
                var tag = document.createElement('script');
                tag.src = 'http://www.jxntv.cn/data/jmd-jxtv2.html?callback=list&_=1454376870403';#这个API会拿到callback对应的函数名并返回
                document.head.appendChild(tag);
                document.head.removeChild(tag);
            }
            function list(arg) {
                console.log(arg);
            }
        </script>
    </body>
    </html>

    最常用的

        $.ajax({
            url:'http://',
            type:'POST',
            dataType:'jsonp',
            jsonp:'callback',
            jsonpCallback:'list'
        })
  • 相关阅读:
    CentOS linux系统将UTC时间修改为CST时间
    .py与.pyc文件区别
    Linux安装python3.6
    ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字
    FinalShell Mac OS版,Linux版安装及教程
    jmeter 参数化学习之CSV Data Set Config随机读取一行参数
    linux把文件压缩成.tar.gz的命令
    Mac下Sublime Text3配置Python开发环境
    Web Api通过文件流下载文件到本地实例
    WebAPI返回时间数据不带T
  • 原文地址:https://www.cnblogs.com/hongpeng0209/p/6741508.html
Copyright © 2020-2023  润新知