为什么这个网站返回包装在jQuery标签中的自动完成数据

Why is this website returning autocomplete data wrapped in a jQuery tag?

本文关键字:数据 标签 jQuery 网站 返回 包装 为什么      更新时间:2023-09-26

我正在查看 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. David'u0027s 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. David'u0027s 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. David'u0027s 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 资源都位于同一域中。