AJAX,RESTful / Rest,JSON和JSONP有什么区别?

时间:2011-08-19 01:06:12

标签: json ajax rest jsonp

我只是对这些术语感到困惑。有人可以提供/向我解释一个例子吗?

3 个答案:

答案 0 :(得分:47)

  • Ajax - “异步Javascript和XML”。 Ajax松散地定义了一组技术,以帮助使Web应用程序呈现更丰富的用户体验。屏幕的数据更新和刷新是使用javascript和xml(或json或只是普通的http帖子)异步完成的。

  • JSON - “Javascript对象表示法”。 JSON就像xml一样,它可以用来描述对象,但它更紧​​凑,并且具有实际javascript的优点。用JSON表示的对象可以转换为要在javascript代码中操作的实际对象。

  • 默认情况下,Ajax请求必须发生在请求所源自的页面的同一域中。创建了JSONP - “带填充的JSON” - 允许您从其他域请求JSON资源。 (CORS是JSONP的更新且更好的替代方案。)

  • REST - “具象国家转移”。使用REST原则的应用程序具有Url结构和围绕资源使用的请求/响应模式。在纯模型中,HTTP Verbs Get,Post,Put和Delete分别用于检索,创建,更新和删除资源。通常不使用Put和Delete,将Get和Post映射到选择(GET)以及创建,更新和删除(POST)

答案 1 :(得分:17)

Ajax,或者更确切地说,AJAX代表Asynchronous Javascript和Xml。从技术上讲,它指的是浏览器(使用XmlHttpRequest)代表当前页面上运行的某些脚本所做的任何异步请求,无论返回什么内容类型。它还可以用于描述构建页面/站点的特定模式,其中在页面上动态地获取/更新大部分/全部内容。当用于描述数据格式时,“ajax”通常表示“xml”。

JSON是一种数据编码格式。名称本身是“JavaScript Object Notation”的首字母缩写。 JSON格式的数据如下所示:

{"key": "value1", "key2": {"number": 1, "array": [0, 1, 2]}}

JSON数据可以通过AJAX请求获取,尽管它在其他上下文中非常常用作轻量级,可扩展且易于解析的数据交换格式。

JSONP只是包含在回调函数中的JSON格式数据。 “P”代表“with Padding”,除非你喜欢将函数调用视为“填充”,否则这是一种愚蠢的行为。无论如何,JSONP数据将如下所示:

someFunction({"key": "value1", "key2": {"number": 1, "array": [0, 1, 2]}});

因此,JSONP实际上只是一个JavaScript代码段,与JSON不同,它不在JavaScript,浏览器(或其他支持JavaScript的客户端)和AJAX请求的上下文之外使用。使用JSONP的原因是它允许same-origin policy被颠覆。如果站点Y与站点X位于不同的域中,则从站点X获取的脚本无法直接请求站点Y.但是,如果站点Y的服务器可以发送JSONP格式的响应,则站点X的脚本可以添加引用站点Y上的URL的文档的新<script>标记,并且当加载来自站点Y的响应时,它将调用脚本X在文档中定义的一些回调函数,从而使脚本X能够访问数据从站点Y动态加载。

请注意,XmlHttpRequest(通常)不会请求JSONP数据。它可以通过这种方式完成,但需要遵循同源策略的标准警告,但是你会丢失使JSONP首先变得有用的跨域魔术。

REST只是关于HTTP实际工作/打算如何使用的正式规范/描述。如果您了解用于从服务器请求相应资源的URL的概念以及GetPost之间的差异,那么您真正了解REST所需的全部内容。

答案 2 :(得分:4)

Ajax代表异步JavaScript和Xml / XhttpRequet(X依赖并改变,因为今天大多使用json。

这是一种使用javascript向服务器执行请求并接收一些响应的方法。这个响应可以是任何东西,json,xml,text,html等......

这使得页面看起来非常敏感,无需重新加载整个页面来对其执行操作。例如,将此答案发布到您的问题中。 : - )

Json是一种数据格式,代表JavaScrip Object Notation。它比xml更轻松的序列化格式,并且具有JavaScript的优势。

JsonP是与Json一起使用Ajax的下一个合乎逻辑的步骤。

服务器将响应JSONP将Json对象包装在回调函数中。函数的名称由客户端传递给服务器,通常作为查询字符串中的参数。 P代表填充,因为服务器用函数名称和对象作为参数围绕json对象。

callback({"name":"my name"});

有关更详细的说明,请参阅:http://en.wikipedia.org/wiki/JSONP