ajax 和jsonp 使用

定义:

  • ajax和jsonp 用于和后端通信,获取数据和信息,实现页面的局部刷新功能。、
  • ajax
    一种发送HTTP请求与后台进行异步/同步通讯的技术。
    原理:实例化XmlHttp对象,使用此对象与后台通信。

  • AJAX 的方法:
  • **1、 . a j a x ( ) u r l : t y p e : G E T d a t a T y p e : j s o n / h t m l / j s o n p d a t a : . d o n e ( ) : . f a i l ( ) : a s y n c : t r u e .ajax({})** --- 常用参数: - url: 请求网络地址。 - type: 请求方式。默认为GET。 - dataType: 设置返回的数据格式,json/html/jsonp。 - data: 设置发送给服务器的数据。 - .done(): 设置请求成功后的回调函数。 - .fail(): 设置请求失败后的回调函数。 - async : 设置是否异步,默认为 true。 -
$.ajax({
            url: "./data.json",
            type: "get",
            dataType: "json",
        });
        .done(function(data) {//请求成功的回调函数
            alert('请求成功');
        })
        .fail(function() {
            alert('服务器超时,请重试!');
        });
    });

同源策略:

  • ajax请求的页面或资源只能是同一个域下面的资源,不能是其他域的资源,这是在设计ajax时基于安全考虑。
  • 2、$.get()
    . g e t ( ) 使 G E T u r l : 访 d a t a : f u n c t i o n d a t a , s t a t u s , d a t a T y p e : .get() 方法 使用GET请求从服务器加载数据。 --参数: --url: 访问的网址,需要遵循同源策略。 --data: 发送到服务器的数据。 --function(data,status){},请求成功运行的方法。 --dataType: 请求相应的数据类型。 -
  • $ .get()方法的参数额和$.ajax()不一样,网址url为必须的参数,其他三个为可选。
  • data为返回的数据,status表示请求的状态,一般有‘success’,‘error’,‘timeout’等几种。
  • 如果dataType 类型为jsonp,也可以跨域请求数据。
  • 无请求失败的回调函数
$.get(
            "./data.json",
            function (data,status) {
                console.log(data);
            },
            "json"
        );

$.post():
与get的请求方式不一样。


$.load():
从服务器加载数据,不需要指定dataType,返回的数据会自动放置到元素中。

  • 参数
    url: 请求地址。
    data: 请求参数,可选。
    function(response,status,xhr): 请求成功的回调函数。
  • 注意:
    不能跨域访问数据。
    response为返回的数据,status为请求的状态。
    无请求失败的回调函数。
$(".box").load(
            "./data.json",
            function (response,status) {
                console.log(data.name);
            }
        );
        <div class='box'></div>

$.getJSON():
使用AJAX的HTTP GET 请求获取JSON数据
参数:

  • url: 请求网址,必须的参数。
  • data: 发送给服务器的数据。
  • function(data,status,xhr): 请求成功的回调函数。
    注意:
    方法直接获取的是JSON数据。
    无返回失败的回调函数
    回调函数是命名函数,不是匿名函数。
$.getJSON(
            "./data.json",
            function(data,status) {
                console.log(data.name);
            },
        );

  • getScript()
    方法使用 AJAX 的 HTTP GET 请求获取并执行js代码。
    参数:
    url: 请求地址。
    function(data,status): 请求成功的回调函数。
    注意:
    返回的data是js代码
    该方法可以用来动态加载js代码
$.getScript(
            "./data.js",
            function(data,status) {
                console.log(data);
            },
        );
  • JSONP
    定义:一种可以实现跨域发送http请求的数据通信格式,可以嵌在ajax中使用。
    原理:利用script标签可以跨域链接资源的特性。
  • 利用ajax
$.ajax({
    url:'...../data.js',//可以不是本地域名 
    type:'get',
    dataType:'jsonp',  //jsonp格式访问
    jsonpCallback:'aa'  //获取数据的函数
})
.done(function(data){
    console.log(data.name);
})
.fail(function() {
    alert('服务器超时,请重试!');
});

aa({
    
    "data":{
        "email":"xi",
        "age":"18"
    }
})
  • 使用ajax的方法本质上也是script标签可以跨域链接资源,不过jquery为其封装了相同的方法,看起来一样。
  • 执行过程为:ajax通过jsonp技术跨域访问data.js文件,通过找到aa()方法将其参数传递给.done方法的data参数执行.done方法。
  • 目前这种方式仍然有其局限性,就是必须知道data.js文件的名字和定义的方法aa,如果在仅仅知道域名的情况下,需要另外的方法.

  • 方法二
$.ajax({
        url:'https://sug.so.360.cn/suggest?',//请求360搜索的联想数据
        type:'get',
        dataType:'jsonp',  //jsonp格式访问
        data: {word: $input.val()},
    })
    .done(function(data){
        console.log(data);
    })
    .fail(function() {
        alert('服务器超时,请重试!');
    });

通过浏览器查看每次输入关键字服务器发送回的数据包,找到js文件中header的地址以及相关的提交数据,发现key为word关键字,因此可以向服务器发送data数据。
服务器返回的数据会自动传给回调的匿名函数的参数data.

猜你喜欢

转载自blog.csdn.net/qq_16183731/article/details/85533647