Fork me on GitHub

JSONP

JSONP的原理:[json with padding]

引入文件
通过回调函数将获取到的数据当成参数传递给回调函数中的变量。

跨域问题:

域顾名思义就是域名,跨域表示一个域名下的文件访问另一个域名下的资源。
解决跨域问题的方法[由于AJAX存在跨域限制]

  • 通过JSONP,也就是script标签
  • 通过服务器中转
  • 通过flash,创建一个xml文件
1
2
3
4
5
6
7
8
9
10
11
function fn(a){
console.log(a.s[0])
}
window.onload=function (){
var btn=document.getElementById("btn");
btn.onclick=function (){
var olink=document.createElement("script");
olink.src="http://suggestion.baidu.com/su?wd=a&cb=fn";
document.body.appendChild(olink);
}
}

AJAX与JSONP的异同

  1. 这2种调用方式在技术上看起来很像,都是请求一个URL,再把返回的数据进行处理,因此也可以这样说,jQuery是把JSONP作为AJAX的一种方式进行了封装。
  2. 但本质上而言,2者是不同的东西,AJAX是通过XMLHttpRequest获取非本页面的内容,而JSONP则是通过动态创建script获取服务器返回的数据【js脚本】。
  3. 两者的数据格式不一定非得是json格式,可以是任何格式,只不过json格式更为简便明了。
  4. 总而言之,jsonp不是ajax的一个特例,哪怕jquery把jsonp封装进ajax,也不能改变这一点!

参考文章

据说帅的人都赏给博主几块钱零花钱。