zoukankan      html  css  js  c++  java
  • jQuery封装的ajax方法、发送jsonp请求、ajax全局事件、restful风格的api、获取XML数据

    使用ajax技术发送请求代码比较繁琐,因此我们自己封装了ajax函数

    但是在jQuery这个库中也封装了ajax方法,而且jQuery封装的方法要比我们自己封装的方法功能上更加强大

    一、 $.ajax()

    作用:发送ajax请求

    $.ajax({
         type: 'get',
         url: 'http://www.example.com',
         data: { name: 'zhangsan', age: '20' },
         contentType: 'application/x-www-form-urlencoded',
         beforeSend: function () { 
             return false
         },
         success: function (response) {},
         error: function (xhr) {}
    });
    {
         data: 'name=zhangsan&age=20'
     }
    //data也可以写成上面这种形式
    
    contentType: 'application/json'

      

    serialize方法

    作用:将表单中的数据自动拼接成字符串类型的参数

    var params = $('#form').serialize();
    // name=zhangsan&age=30

    二、发送jsonp请求

     jsonp请求就是属于get请求

    $.ajax({
        url:'',
        // 代表现在要发送的是jsonp请求
        dataType:'jsonp',
    // 修改callback参数名称
    // 通过callback把函数名称传递给服务器端,有些不使用callback,使用其他的简写比如:cb
    jsonp:'cb',
    // 指定函数名称
    jsonCallback:'fnName', success:
    function(response){ console.log(response); } })
    • jsonp属性的使用

    一般情况下调用$.ajax(), 向服务器端传递函数名字的参数名称,原来是callback,现在通过jsonp修改这个名字

    // 客户端修改传递的函数的名字 
    <button id="btn">发送请求</button> <!-- 没有添加jsonp属性之前发送的请求是 "./js/jquery.min.js?callback=XXX "--> <!-- 使用了jsonp属性之后就可以写成 "./js/jquery.min.js?cb=XXX" --> <script src="./js/jquery.min.js"></script> <script> $('#btn').on('click', function(){ $.ajax({ url:'/jsonp', // 向服务器端传递函数名字的参数名称 jsonp:'cb', // 代表现在是发送jsonp请求 dataType:'jsonp', success:function(response){ console.log(response); } }) }) </script>
    // 服务器端修改
    app.get('/jsonp', (req, res) => { // 接收客户端传递过来的函数名字 const cb = req.query.cb; const data = cb+"({name:'zhaoliu'})"; res.send(data); })
    • jsonpCallback属性的使用

    正常情况下,请求发送成功之后,就会调用success函数,但是如果不想调用success函数,可以添加jsonpCallback属性,属性值是函数名称,在发送请求之前定义好这个函数名称的函数,但是一般情况下这个函数使用不上的,使用success就可以了

     // response就是服务器端返回的数据形参
            function fn(response){
                console.log(response);
                
            }
    
            $('#btn').on('click', function(){
                $.ajax({
                    url:'/jsonp',
                    // 向服务器端传递函数名字的参数名称,原来是callback,现在通过jsonp修改这个名字
                    jsonp:'cb',
                    // 请求发送之后如果不想调用success函数,就使用jsonpCallback属性,数据返回之后就会调用这个函数
                    jsonpCallback:'fn',
                    // 代表现在是发送jsonp请求
                    dataType:'jsonp',
                    // success:function(response){
                    //     console.log(response);
                        
                    // }
                })
            })

    serialize()和 new FormData()的区别

    serialize()和FormData对象都可将表单数据序列化,后通过ajax异步提交 ,序列化表单就是将form表单中所有name属性序列化成KEY-VALUE的形式,提交到后台,后台以对象相应的字段接收

    1.serialize()

      serialize()是JQuery方法,必须依赖jQuery,可序列化表单值创建 URL 编码文本字符串,就是将表单数据以字符串的形式返回,在ssm框架中可通过对象直接接收数据。

           缺点:只能序列化一般数据,文件上传则无法序列化,不支持文件二进制流提交。

    2.FormData对象

      FormData是HTML5对象,目前可兼容大多主流的浏览器,但不兼容低版本IE浏览器。

          与普通的Ajax相比,使用FormData 的最大优点就是可以异步上传二进制文件。

      通过ajax异步提交表单数据,可实现文件上传

    来源: https://www.cnblogs.com/leafarmyarmy/p/10766923.html


    ajax和jsonp的区别

    ajax是通过创建ajax对象发送请求的,ajax技术的原理是实例化xmlhttp对象,使用此对象与后台通信。ajax通信的过程不会影响后续javascript的执行,从而实现异步。

    ajax请求的页面或资源只能是同一个域下面的资源,不能是其他域的资源,这是在设计ajax时基于安全的考虑。

    jsonp是通过创建script标签来发送请求的,jsonp可以跨域请求数据,它的原理主要是利用了script标签可以跨域链接资源的特性。


    三、$.get()和$.post()

    <button id="btn">发送请求</button>
        <script src="./js/jquery.min.js"></script>
        <script>
            $('#btn').on('click',function(){
                // 第一个参数是请求地址,
                // 第二个参数是一个对象,也可以是一个字符串,是向服务器端传递的请求参数,参数可选
                // 第三个参数是一个回调函数 其实就是success函数,请求成功后自动调用。函数的形参response就是服务器端返回的响应数据
                // $.get('/base', 'name=zhangsan&age=14', function(response){
                //     console.log(response);
                    
                // })
    
                $.post('/base', function(response){
                    console.log(response);
                    
                })
            })
        </script>

    四、jQuery中ajax全局事件

    目的:当页面中有ajax请求被发送时,我们需要给用户一个等待的提示,提示用户当前请求正在操作的过程中,但是尤其当网速比较慢的时候,这个需求比较有用。

    在ajax请求参数中加入beforeSend属性可以解决这个问题,但是当页面中请求比较多的时候,我们要在每一个ajax请求中都加入这个,代码的重复率就比较高

    ajax全局事件就可以解决这个问题

    全局事件:只要页面中有ajax请求被发送,对应的全局事件就会被触发

    .ajaxStart() // 当请求开始发送时触发
    .ajaxComplete()  // 当请求完成时触发

    全局事件需要绑定在$(document )身上

    // 当页面中有ajax请求发送时触发
    $(document).on('ajaxStart',function() {
        console.log('start');
    })
    
    // 当页面中有ajax请求完成时触发
    $(document).on('ajaxStart',function() {
        console.log('complete');
    })

    NProgress进度条插件的使用

    1. 引入相关文件

    <link rel="stylesheet" href="js/nprogress/nprogress.css">
    
    <script src="/js/nprogress/nprogress.js"></script>

    2.

    // 当页面中有ajax请求发送时触发
    $(document).on('ajaxStart',function() {
        NProgress.start();   // 进度条开始运动             
    })
    
    // 当页面中有ajax请求完成时触发
    $(document).on('ajaxComplete',function() {
        NProgress.done();  // 进度条结束运动
    })

    五、RESTful 风格的API

     

    <body>
        <script src="./js/jquery.min.js"></script>
        <script type="text/javascript">
            // 获取用户列表信息
            $.ajax({
                type:'get',
                url:'/users',
                success:function(response){
                    console.log(response);
                    
                }
            })
    
            // 获取id为1的用户信息
            $.ajax({
                type:'get',
                url:'/users/1',
                success:function(response){
                    console.log(response);
                    
                }
            })
    
            //删除id为1的信息
            $.ajax({
                type:'delete',
                url:'/users/1',
                success:function(response){
                    console.log(response);
                    
                }
            })
    
            // 修改
            $.ajax({
                type:'put',
                url:'/users/10',
                success:function(response){
                    console.log(response);
                    
                }
            })
        </script>
    </body>

    六、XML基础

    XML:全称是extensible markup language,代表可扩展标记语言,它的作用是传输和存储数据

    XML所有的标签都是开发者定义的,他用来存储和传输数据,关注于数据的内容

    而HTML标签是有预定义的,它的用来展示数据的,关注于数据的外观

    XML DOM:XML文档对象模型,是w3c组织定义的一套操作XML文档对象的api。浏览器会把XML文档解析成文档对象模型

    如何把服务器端返回的XML类型的数据展示到HTML页面中?

        <button id="btn">发送请求</button>
        <div id="container"></div>
        <script type="text/javascript">
            var btn = document.getElementById('btn');
            var container = document.getElementById('container');
    
            btn.onclick = function(){
                var xhr = new XMLHttpRequest();
                xhr.open('get','/xml');
                xhr.send();
                xhr.onload = function(){
                    // xhr.responseXML 获取服务器段返回的xml数据
                    var xmlDocument = xhr.responseXML;
                    var title = xmlDocument.getElementsByTagName('title')[0].innerHTML;
                    container.innerHTML = title;
                }
            }
        </script>

    通过 xhr.responseXML 获取服务器段返回的xml类型的数据

    将该值赋值给信息的变量,新变量就可以像HTML一样,下面也有很多 getElementsByTagName、getElementsById等等这样的方法属性

    但是xml类型的数据其实已经很少使用了,但需要了解

  • 相关阅读:
    C++雾中风景14:CRTP, 模板的黑魔法
    ClickHouse源码笔记1:聚合函数的实现
    C++雾中风景番外篇4:GCC升级二三事
    C++雾中风景13:volatile解惑
    AeroSpike踩坑手记1:Architecture of a Real Time Operational DBMS论文导读
    Linux 程序设计1:深入浅出 Linux 共享内存
    C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存的工具
    C++雾中风景番外篇2:Gtest 与 Gmock,聊聊C++的单元测试
    C++雾中风景12:聊聊C++中的Mutex,以及拯救生产力的Boost
    用TensorFlow搭建一个万能的神经网络框架(持续更新)
  • 原文地址:https://www.cnblogs.com/ccv2/p/12814894.html
Copyright © 2011-2022 走看看