定义:
- ajax和jsonp 用于和后端通信,获取数据和信息,实现页面的局部刷新功能。、
- ajax
一种发送HTTP请求与后台进行异步/同步通讯的技术。
原理:实例化XmlHttp对象,使用此对象与后台通信。
- AJAX 的方法:
- **1、
$.ajax({
url: "./data.json",
type: "get",
dataType: "json",
});
.done(function(data) {//请求成功的回调函数
alert('请求成功');
})
.fail(function() {
alert('服务器超时,请重试!');
});
});
同源策略:
- ajax请求的页面或资源只能是同一个域下面的资源,不能是其他域的资源,这是在设计ajax时基于安全考虑。
- 2、$.get()
— - $ .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.