Joe*_*Joe 5 javascript ajax html5 jsonp asp.net-web-api
可能重复:
Ajax跨域调用
我的应用程序使用ASP .Net Web API 4.5 RTM,它与不同域上的HTML5和AJAX交互.
此应用程序是否需要使用JSONP而不是JSON进行序列化/反序列化?
JSONPJSON with padding是对基本 JSON 数据格式的补充。它提供了一种从不同域中的服务器请求数据的方法,由于同源策略,典型的 Web 浏览器禁止这样做。
在同源策略下,server1.example.com 提供的网页无法正常连接或与除 server1.example.com 以外的服务器通信。
HTML 元素是一个例外。利用元素的开放策略,某些页面使用它们来检索 JavaScript 代码,这些代码对来自其他来源的动态生成的 JSON 格式的数据进行操作。这种使用模式称为 JSONP。
JSONP 请求检索的不是 JSON,而是任意 JavaScript 代码。它们由 JavaScript 解释器评估,而不是由 JSON 解析器解析。
要了解此模式的工作原理,首先考虑返回 JSON 数据的 URL 请求。XMLHttpRequest例如,JavaScript 程序可能通过 请求此 URL 。假设 Foo 的 UserId 是 1234。浏览器请求 URLhttp://server2.example.com/Users/1234,传递 Foo 的 Id,将收到类似以下内容的内容:
{"Name": "Foo", "Id": 1234, "Rank": 7}
Run Code Online (Sandbox Code Playgroud)
该 JSON 数据可以根据 URL 中传递的查询参数动态生成。这里,HTML 元素为其 src 属性指定一个返回 JSON 的 URL:
<script type="text/javascript"
src="http://server2.example.com/Users/1234">
</script>
Run Code Online (Sandbox Code Playgroud)
浏览器将按顺序下载脚本文件,评估其内容,将原始 JSON 数据解释为块,并抛出语法错误。即使数据被解释为 JavaScript 对象字面量,浏览器中运行的 JavaScript 也无法访问它,因为如果没有变量赋值,则无法访问对象字面量。
在 JSONP 使用模式中, src 属性指向的 URL 请求返回 JSON 数据,并包含一个函数调用。这样,JavaScript 环境中已定义的函数就可以操作 JSON 数据。JSONP 负载可能如下所示:
functionCall({"Name": "Foo", "Id": 1234, "Rank": 7});
Run Code Online (Sandbox Code Playgroud)
函数调用是 JSONP 的“P”——纯 JSON 周围的“填充”,或者根据 some[1] 的“前缀”。按照惯例,浏览器在向服务器发出的请求中提供回调函数的名称作为命名查询参数,通常使用名称 JSONP 或回调,例如:
<script type="text/javascript"
src="http://server2.example.com/Users/1234?jsonp=parseResponse">
</script>
Run Code Online (Sandbox Code Playgroud)
在此示例中,接收到的有效负载为:
parseResponse({"Name": "Foo", "Id": 1234, "Rank": 7});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |