首页 > jsonp和ajax的关系

jsonp和ajax的关系

如题,总觉得jsonp和ajax之间没啥太大关系,但是他俩总被一起提及,所以有点疑惑,希望各位大大们指点一下。

我的疑惑主要是:ajax其实用它是不是主要就是因为它的异步,它去服务器端取数据,html页面可以在它取数据期间接着走下面的,等ajax取回数据了再处理;jsonp不也是利用回调函数,去指定服务器上取数据的时候不用等待,等它取回来了直接用回调函数一处理,也达到了异步的效果呀,不知道这么理解对不对。

在刚开始我还没了解jsonp的时候,我以为是jsonp做了一系列的跨域处理之后,能够让ajax跨域了,然后ajax取到了数据再处理;但是我看了jsonp的例子之后就发现它直接就把取数据加处理全干了,跟ajax没啥事了呀。

jsonp有限制,只能用于get请求。那是不是说如果假设jsonp能处理post请求,它就可以代替ajax了?


二者经常被一起提起是因为jquery的原因,jquery把jsonp封装到ajax方法里,其实二者完全不一样,ajax就是楼上那样的东西,jsonp则是利用script不受跨域限制的特性,跨域获取数据


首先要了解,xhr是不支持跨域的(xhr2可以,不过要配置服务器),那么什么方法可以跨域请求呢?
script标签,没错就这货,这个标签可以在自己的网站载入其他网站的js脚本,所以jsonp实现原理:通过js动态地在文档流创建一个script标签,然后载入js脚本,服务器怎么响应这个脚本呢??
很简单,响应这个脚本执行一个js函数就行,然后吧需要数据作为参数传入函数里,callback(data),创建后会自动执行这个函数(当然前提你要有这么个函数)就这么简单;
前端怎么处理呢?
前端就得定义这么样的函数

function callback(data){

   //do

}
原理就是这么简单,至于jsonp与ajax有什么关系呢?
都可以用来实现网页局部更新,并不是ajax的内容(原生xhr是没有jsonp这么一说的)。


差不多是你说的那个意思,jsonp 和 ajax 都是异步去获取数据的方法,当有跨域问题的情况下有时候会选择它,功能上有相似性被一起提及无可厚非。
当然我觉得它俩一块被提及的另外一部分原因是 jQuery 将 jsonp 方法直接融入到 $.ajax 函数里面了。
最后这世界上没有如果…要真有如果…我想 JavaScript 并不会是十天开发出来的语言→_→


jsonp不是使用xhr对象发送请求,而是创建一个script标签,标签的src属性设置成要请求的URL。当标签插入dom时浏览器就会自动请求这个URL,并把结果当做js代码执行。
这样做的优点是跨域,缺点是只能使用get,而且不能设置header。因为请求完全不受js控制


jsonp确实跟ajax没啥关系,只是类似jquery这样的库习惯将同域和跨域请求混在一起才以为有关系
另外就算jsonp可以通过post请求也不能代替ajax,因为jsonp的是只有成功或者失败2个状态,跟ajax还差很远


jsonp确实和ajax没有半毛钱关系,只算是一种机制跨域数据获取方案或者协议。
只是说很多库(比如jquery)里面对jsonp和ajax做了一样的封装,看起来就好像jsonp是ajax的一部分一样,这好像会造成误解。
jsonp的限制是来源于src的限制,src是不可能做到post请求的,如果可以,那特么就是疯了。。

【热门文章】
【热门文章】