我正在查看 www.healthgrades.com 上的自动完成小部件并检查网络响应。
我认为数据是 JSON,但它似乎已经通过某种编码/过滤器运行并转义,然后在 jQuery 标签中返回(大概是缓存破坏者?
一小部分数据如下所示。
jQuery17207977216457948089_1379039838014([{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-central/scott-and-white-memorial-hospital-hgst712bc8b6450054","Text":"Scott and White Memorial Hospital","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-austin/st-davids-medical-center-hgst613bc8b6450431","Text":"St. Davidu0027s Medical Center","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-southern/st-davids-georgetown-hospital-hgst182bc8b6450191","Text":"St. Davidu0027s Georgetown Hospital","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-austin/heart-hospital-of-austin-hgstbb7ecdaa450824","Text":"Heart Hospital of Austin","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null},{"ItemIds":null,"LinkUrl":"/hospital-directory/texas-tx-austin/st-davids-north-austin-medical-center-hgst234bc8b6450809","Text":"St. Davidu0027s North Austin Medical Center","PlainText":null,"Type":"tophospital","TrackingName":null,"StateAbbreviation":null,"Data":null}]);
这样做有什么好处,如果我的假设是错误的,这里发生了什么?
jQuery JSONP
支持的一个例子。
JSONP,如果你不熟悉,是"带有填充的JSON"。填充是对全局函数的调用,该函数以 JSON 作为参数。
开头的名称 jQuery17207977216457948089_1379039838014
是 jQuery 在请求开始时生成的全局函数。而且,它将在查询字符串中使用 ?
占位符为任何请求创建一个:
jsonp
类型将查询字符串参数callback=?
追加到 URL。服务器应在 JSON 数据前面加上回调名称,以形成有效的 JSONP 响应。我们可以指定一个参数名称,而不是使用 jsonp 选项callback
来$.ajax()
.
JSONP 的主要优点是它支持跨源请求。它通过创建<script>
而不是XMLHttpRequest
(类似于使用$.getScript()
)来实现这一点,因为它们不受SOP的限制。但是,它们仅限于GET
请求;所以这有点权衡。
而且,这是在引入CORS之前可用的跨源选项。
顺便说一句:JSONP在技术上被视为JavaScript,利用了JSON的语法取自JavaScript。
它是 jsonp 请求的响应格式,它是一种用于克服 ajax 请求的同源策略限制的技术,其中浏览器阻止对与页面加载位置不同的域的 ajax 请求。
在这种特殊情况下,它没有多大用处,因为页面和 ajax 资源都位于同一域中。