### Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
#### 一、Jsonp 关键字详解
Jsonp(JSON with Padding)是一种跨域数据交互协议,它允许在一个网页中请求并获取另一个域的服务端数据。Jsonp 的工作原理主要是利用`<script>`标签的特性来实现跨域数据的获取。
**Jsonp 的实现步骤:**
1. **客户端注册一个回调函数:** 客户端需要先定义一个函数,这个函数将会用来处理服务器返回的数据。
```javascript
function handleResponse(data) {
console.log(data);
}
```
2. **向服务器发送请求:** 在请求URL中添加一个回调函数名作为参数。例如:
```html
<script src="http://example.com/data?callback=handleResponse"></script>
```
3. **服务器响应:** 服务器收到请求后,根据客户端提供的回调函数名称,生成一段JavaScript代码,并将数据以参数的形式传入这个回调函数中。
```javascript
handleResponse({"name":"hanzichi","age":10});
```
4. **客户端执行回调函数:** 浏览器加载并执行这段JavaScript代码,从而触发之前定义的回调函数,处理返回的数据。
#### 二、Json与Jsonp的区别
**Json(JavaScript Object Notation)**是一种轻量级的数据交换格式。它基于JavaScript的一个子集,采用了一种类似于XML的格式来表示结构化数据,但比XML更轻巧、更快捷。Json的主要用途是在服务器端和客户端之间传输数据。
**Jsonp**则是一种用于解决跨域问题的技术。它不是一种标准的数据格式,而是作为一种解决方案被提出。Jsonp 的核心是通过动态创建`<script>`标签,并将其`src`属性设置为需要请求的URL来实现跨域数据获取。
**区别总结:**
- **数据格式:** Json是一种数据格式,而Jsonp是一种数据传输方式。
- **使用场景:** Json用于数据交换,Jsonp用于解决跨域问题。
- **实现机制:** Json通过对象或数组表示数据;Jsonp通过`<script>`标签和回调函数实现。
#### 三、Ajax与Jsonp的区别
**Ajax(Asynchronous JavaScript and XML)** 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。Ajax 可以使用多种数据格式,如XML、Json等,但其主要问题是受到同源策略的限制,无法直接发起跨域请求。
**Jsonp** 是专门为解决Ajax的跨域问题而设计的。它通过`<script>`标签来实现跨域数据获取,因此不受同源策略的影响。
**区别总结:**
- **请求方式:** Ajax 使用 XMLHttpRequest 发送请求;Jsonp 通过动态创建`<script>`标签来实现。
- **跨域支持:** Ajax 默认不支持跨域,需通过CORS或其他方式;Jsonp 自然支持跨域。
- **数据格式:** Ajax 支持多种数据格式(包括Json);Jsonp 特别是为了处理Json数据而设计。
#### 四、总结
- **Jsonp** 是为了解决跨域问题而产生的,它利用`<script>`标签的特性实现了跨域数据获取。
- **Json** 是一种数据格式,用于结构化数据的交换。
- **Ajax** 提供了一种无需刷新页面即可与服务器交互的方式,但受限于同源策略,无法直接发起跨域请求。
Jsonp 是一种独特的跨域解决方案,它与Json和Ajax有本质上的不同。在实际开发中,根据不同的需求选择合适的技术是非常重要的。