zoukankan      html  css  js  c++  java
  • web前端(八)——ajax与jsonp

    Ajax技术的原理是实例化xmlhttp对象,使用此对象与后台通信

    Ajax通信的过程不会影响后续javascript的执行,从而实现异步

    Ajax 是一种用于创建快速动态网页的技术

    Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术

    同步和异步

      现实生活中,同步指的是同时做几件事情,异步指的是做完一件事后再做另外一件事

      程序中的同步和异步是把现实生活中的概念对调,也就是程序中的异步指的是现实生活中的同步,程序中的同步指的是现实生活中的异步。

    局部刷新和无刷新

      ajax可以实现局部刷新,也叫做无刷新,无刷新指的是整个页面不刷新,只是局部刷新,ajax可以自己发送http请求,不用通过浏览器的地址栏,所以页面整体不会刷新,ajax获取到后台数据,更新页面显示数据的部分,就做到了页面局部刷新。

    数据接口

      数据接口是后台程序提供的,它是一个url地址,访问这个地址,会对数据进行增、删、改、查的操作,最终会返回json格式的数据或者操作信息,格式也可以是text、xml等

    $.ajax使用方法

      常用参数:
        1、url 请求地址
        2、type 请求方式,默认是'GET',常用的还有'POST'
        3、dataType 设置返回的数据格式,常用的是'json'格式,也可以设置为'html'
        4、data 设置发送给服务器的数据
        5、success 设置请求成功后的回调函数
        6、error 设置请求失败后的回调函数
        7、async 设置是否异步,默认值是'true',表示异步

    以前的写法:

    $.ajax({
        url: '/change_data',
        type: 'GET',
        dataType: 'json',
        data:{'code':300268}
        success:function(dat){
            alert(dat.name);
        },
        error:function(){
            alert('服务器超时,请重试!');
        }
    });

    新的写法(推荐):

    $.ajax({
        url: '/change_data',
        type: 'GET',
        dataType: 'json',
        data:{'code':300268}
    })
    .done(function(dat) {
        alert(dat.name);
    })
    .fail(function() {
        alert('服务器超时,请重试!');
    });

    $.ajax的简写方式

      $.ajax按照请求方式可以简写成$.get或者$.post方式

    $.get("/change_data", {'code':300268},
      function(dat){
        alert(dat.name);
    });
    
    $.post("/change_data", {'code':300268},
      function(dat){
        alert(dat.name);
    });

    同源策略

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

    XMLHttpRequest cannot load https://www.baidu.com/. No  
    'Access-Control-Allow-Origin' header is present on the requested resource.  
    Origin 'null' is therefore not allowed access.

    jsonp

      ajax只能请求同一个域下的数据或资源,有时候需要跨域请求数据,就需要用到jsonp技术,jsonp可以跨域请求数据,它的原理主要是利用了<script>标签可以跨域链接资源的特性。jsonp和ajax原理完全不一样,不过jquery将它们封装成同一个函数。

     

      获取360搜索关键词联想数据

    $(function(){
        $('#txt01').keyup(function(){
            var sVal = $(this).val();
            $.ajax({
                url:'https://sug.so.360.cn/suggest?',
                type:'get',
                dataType:'jsonp',
                data: {word: sVal}
            })
            .done(function(data){
                var aData = data.s;
                $('.list').empty();
                for(var i=0;i<aData.length;i++)
                {
                    var $li = $('<li>'+ aData[i] +'</li>');
                    $li.appendTo($('.list'));
                }
            })        
        })
    })
    
    //......
    
    <input type="text" name="" id="txt01">
    <ul class="list"></ul>

    一般ajax数据接口和jsonp数据接口的区别

    开发返回数据的接口,如果是一般的ajax接口,让接口直接返回json格式的数据字符串就可以了,这种接口的数据是不能跨域请求的,如果要跨域请求数据,需要开发jsonp的接口,开发jsonp的接口,需要获取请求地址中的参数,也就是'callback'键对应的值,然后将这个值和json数据拼装成一个函数调用的形式的字符串返回,就完成了一个jsonp的接口,这个键值对是由$.ajax函数自动产生的。比如:'callback'键对应的值一般是这样的:jQuery1124018787969015631711_1522330257607,所以:

    • 一般接口返回的数据形式:'{"iNum":12,'sTr':'abc'}';
    • jsonp返回的数据形式:'jQuery1124018787969015631711_1522330257607({"iNum":12,"sTr":"abc"})';

  • 相关阅读:
    SSL JudgeOnline 1194——最佳乘车
    SSL JudgeOnline 1457——翻币问题
    SSL JudgeOnlie 2324——细胞问题
    SSL JudgeOnline 1456——骑士旅行
    SSL JudgeOnline 1455——电子老鼠闯迷宫
    SSL JudgeOnline 2253——新型计算器
    SSL JudgeOnline 1198——求逆序对数
    SSL JudgeOnline 1099——USACO 1.4 母亲的牛奶
    SSL JudgeOnline 1668——小车载人问题
    SSL JudgeOnline 1089——USACO 1.2 方块转换
  • 原文地址:https://www.cnblogs.com/sickle/p/10130707.html
Copyright © 2011-2022 走看看