AJAX、RESTful/Rest、JSON 和 JSONP 有啥区别?
Posted
技术标签:
【中文标题】AJAX、RESTful/Rest、JSON 和 JSONP 有啥区别?【英文标题】:What is the difference between AJAX, RESTful/Rest, JSON and JSONP?AJAX、RESTful/Rest、JSON 和 JSONP 有什么区别? 【发布时间】:2011-10-30 06:21:42 【问题描述】:我只是对这些术语感到困惑。任何人都可以提供/解释一个例子吗?
【问题讨论】:
【参考方案1】:Ajax - “异步 javascript 和 XML”。 Ajax 松散地定义了一组技术来帮助使 Web 应用程序呈现更丰富的用户体验。屏幕的数据更新和刷新是使用 javascript 和 xml(或 json 或只是普通的 http post)异步完成的。
JSON - “Javascript 对象表示法”。 JSON 与 xml 类似,因为它可以用来描述对象,但它更紧凑,并且具有作为实际 javascript 的优势。以 JSON 表示的对象可以转换为要在 javascript 代码中操作的实际对象。
默认情况下,Ajax 请求必须发生在请求发起的页面的同一域中。 JSONP - “带填充的 JSON” - 旨在让您从不同的域请求 JSON 资源。 (CORS 是 JSONP 的更新更好的替代方案。)
REST - “代表性状态转移”。使用 REST 原则的应用程序具有 Url 结构和围绕资源使用的请求/响应模式。在纯模型中,HTTP 动词 Get、Post、Put 和 Delete 分别用于检索、创建、更新和删除资源。 Put和Delete经常不用,让Get和Post去映射选择(GET)和创建、更新和删除(POST)
【讨论】:
【参考方案2】:Ajax,或者更准确地说,AJAX,代表 Asynchronous Javascript And 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”,这有点愚蠢,除非您喜欢将函数调用视为“padding”。无论如何,JSONP 数据将如下所示:
someFunction("key": "value1", "key2": "number": 1, "array": [0, 1, 2]);
因此,JSONP 实际上只是一个 JavaScript sn-p,与 JSON 不同的是,它不会在 JavaScript、浏览器(或其他支持 JavaScript 的客户端)和 AJAX 请求的上下文之外使用。使用 JSONP 的原因是它允许 same-origin policy 被颠覆。如果站点 Y 与站点 X 位于不同的域中,则源自站点 X 的脚本无法直接请求站点 Y。但是如果站点 Y 的服务器可以发送 JSONP 格式的响应,则站点 X 的脚本可以添加新的 <script>
标记到引用站点 Y 上的 URL 的文档,当加载站点 Y 的响应时,它将调用脚本 X 在文档中定义的一些回调函数,从而使脚本 X 可以访问已加载的数据来自站点 Y 的动态。
请注意,JSONP 数据不是(通常)使用XmlHttpRequest
请求的。可以通过这种方式完成,但要遵守同源策略的标准警告,但这样一来,您就会失去使 JSONP 有用的跨域魔力。
REST 只是 HTTP 实际工作/打算使用的正式规范/描述。如果您了解用于从服务器请求相应资源的 URL 的概念以及 Get
和 Post
之间的区别,那么您就真的了解 REST 所需的一切。
【讨论】:
【参考方案3】:Ajax 代表 Asynchronous JavaScript 和 Xml/XhttpRequet(X 取决于并发生变化,因为今天主要使用 json。
这是一种使用javascript从页面向服务器执行请求并接收一些响应的方法。这个响应可以是任何东西,json、xml、text、html等等……
这使得页面看起来响应速度非常快,而无需重新加载整个页面即可对其执行操作。例如,将此答案发布到您的问题。 :-)
Json 是一种数据格式,代表 JavaScrip Object Notation。它是一种比 xml 更轻量级的序列化格式,并且具有 JavaScript 的优势。
JsonP 是将 Ajax 与 Json 结合使用的下一个合乎逻辑的步骤。
服务器将以 JSONP 响应,将 Json 对象包装在回调函数中。函数的名称由客户端传递给服务器,通常作为查询字符串中的参数。 P 代表填充,因为服务器用函数名称和对象作为参数包围 json 对象。
callback("name":"my name");
有关更详细的说明,请参阅:http://en.wikipedia.org/wiki/JSONP。
【讨论】:
我喜欢“例如将这个答案发布到您的问题...”部分。 :) 回到你身边!以上是关于AJAX、RESTful/Rest、JSON 和 JSONP 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
什么是RESTFUL?REST的请求方法有哪些,有什么区别?