我正在看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}]);
这样做的好处是什么,如果我的假设是错误的,这是怎么回事?
这是jQueryJSONP
支持的一个例子。
JSONP(如果您不熟悉的话)是“ JSON with Padding”。该填充是使用JSON作为参数的全局函数的调用。
开头的名称jQuery17207977216457948089_1379039838014
是jQuery在请求开始时生成的全局函数。并且,它将使用?
查询字符串中的占位符为所有请求创建一个:
该
jsonp
类型将查询字符串参数追加callback=?
到URL。服务器应在JSON数据之前添加回调名称,以形成有效的JSONP响应。我们可以使用callback
jsonp选项指定其他参数名称$.ajax()
。
JSONP的主要优点是它支持跨域请求。它通过创建<script>
而不是XMLHttpRequest
(类似于using $.getScript()
)来完成此操作,因为它们不受SOP的限制。但是,它们仅限于GET
请求;所以这是一个权衡。
并且,这是在引入CORS之前可用的跨域选择。
顺便说一句:JSONP从技术上讲是JSON,被视为JavaScript,它利用了从JavaScript提取的JSON语法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句