过去似乎人们在使用Accept标头时遇到问题,但是我不确定我的问题是否与之相关。使用jQuery 1.4.2,我很难通过来获取JSON getJSON()。我可以在Firebug中观察请求/响应,问题的根源似乎是有问题的资源根据Accept标头返回不同的结果。即使文档说应该设置它,在Firebug中它也显示为“ / ”-显然,我想要“ application / json”。这是一个已知的错误?我应该设置一些我不知道的标志吗?
getJSON()
ETA:如果这个请求很重要,那么该请求是跨站点的,但是我传递了一个callback=?查询参数,因此JQuery(成功!)将其视为JSONP。在这种特殊情况下,我要调用的服务支持一个接受覆盖查询参数(&accept=application/json),因此我可以手动使用它,但是我仍然认为标头欺骗很奇怪,并希望能够修复它,因此在处理可能不太宽容的其他服务时,我不会再碰到这一点。我没有一种简单的方法可以从开发环境中复制/粘贴代码,但要点如下:
callback=?
&accept=application/json
$.getJSON(baseURL + "?item=" + itemNum + "&callback=?", function(data){ console.log(data); }
如您所见,这并不完全复杂,并且 应该 (我99%确信…)导致发送的XHR的Accept标头为application/json。就像我说的,按照Firebug的Net控制台,这没有发生。如果有关系,则在Firefox 3.6.8中使用。
application/json
再次预计到达时间:对于仍在阅读此书的任何人,是的,它仍在发生,不,我不知道为什么。就像我说的那样,简单的getJSON()调用(实际上是基本语法)是跨站点的,被视为JSONP,因为它包含回调查询参数。仍然可以接受建议!
这不是错误。
由于您的通话是跨域的,因此您的浏览器将不允许您进行XHR通话(同源政策)。在内部,jQuery使用“ <script>标签黑客”来解决此问题,以进行跨域调用(这是JSONP数据类型背后的基本思想)。由于调用是使用标记进行的,因此jQuery根本无法修改accepts标头的部分。
<script>
JSONP
accepts
jQuery通过向您隐藏这些细节来发挥其魔力,但是不幸的是,在这种情况下,您似乎受制于泄漏抽象定律。