当前位置: 首页 > 面试题库 >

jQuery的getJSON()没有正确设置Accept标头?

米俊晤
2023-03-14
问题内容

过去似乎人们在使用Accept标头时遇到问题,但是我不确定我的问题是否与之相关。使用jQuery 1.4.2,我很难通过来获取JSON
getJSON()。我可以在Firebug中观察请求/响应,问题的根源似乎是有问题的资源根据Accept标头返回不同的结果。即使文档说应该设置它,在Firebug中它也显示为“
/ ”-显然,我想要“ application / json”。这是一个已知的错误?我应该设置一些我不知道的标志吗?

ETA:如果这个请求很重要,那么该请求是跨站点的,但是我传递了一个callback=?查询参数,因此JQuery(成功!)将其视为JSONP。在这种特殊情况下,我要调用的服务支持一个接受覆盖查询参数(&accept=application/json),因此我可以手动使用它,但是我仍然认为标头欺骗很奇怪,并希望能够修复它,因此在处理可能不太宽容的其他服务时,我不会再碰到这一点。我没有一种简单的方法可以从开发环境中复制/粘贴代码,但要点如下:

$.getJSON(baseURL + "?item=" + itemNum + "&callback=?", function(data){
  console.log(data);
}

如您所见,这并不完全复杂,并且 应该
(我99%确信…)导致发送的XHR的Accept标头为application/json。就像我说的,按照Firebug的Net控制台,这没有发生。如果有关系,则在Firefox
3.6.8中使用。

再次预计到达时间:对于仍在阅读此书的任何人,是的,它仍在发生,不,我不知道为什么。就像我说的那样,简单的getJSON()调用(实际上是基本语法)是跨站点的,被视为JSONP,因为它包含回调查询参数。仍然可以接受建议!


问题答案:

这不是错误。

由于您的通话是跨域的,因此您的浏览器将不允许您进行XHR通话(同源政策)。在内部,jQuery使用“
<script>标签黑客”来解决此问题,以进行跨域调用(这是JSONP数据类型背后的基本思想)。由于调用是使用标记进行的,因此jQuery根本无法修改accepts标头的部分。

jQuery通过向您隐藏这些细节来发挥其魔力,但是不幸的是,在这种情况下,您似乎受制于泄漏抽象定律。



 类似资料:
  • 为了解决这个问题,我尝试了许多JDK版本,但似乎无论我使用哪个java,结果总是一样的。 MavenReportException:创建存档时出错:无法找到javadoc命令:未正确设置环境变量JAVA_HOME。 我跑了: 导出JAVA_HOME=/usr/lib/jvm/JAVA-8-openjdk-amd64 : MavenReportException:创建存档时出错:无法找到javado

  • 问题内容: 在我的Web应用程序中,我使用jQuery的方法提交了一些表单字段。我在编码方面遇到了一些问题。我的应用程序的字符集是,但我认为这些字段是通过提交的。 如何设置通话中使用的编码? 问题答案: 我认为,如果您想更改编码,则可能必须使用,请参见下面的参数(and 回调假定您具有和html中的内容): 我实际上只需要一个小时左右就可以完成,真是巧合!

  • 我的示例应用程序使用了 spring-boot-starter-activeMQ(2.3.1) spring-boot-starter-web(2.3.1) pring-cloud-starter-sleuth(2.2.3)

  • 谁能帮帮我吗?我使用JQuery$.getJSON()根据选定的下拉列表(category)加载一个下拉列表(subcategories)的内容。 由于某种原因我得到了一个IllegalStateException。提前谢谢你。

  • 我似乎得到了错误的哈希值通过我的webSocket键。据我所知,套接字的客户端工作,因为当我让它连接到其他服务器时,它是成功的。 指数js 指数html 运行时密钥和哈希对的示例如下: PxsrStN1CGLK/JBYydUFjg== QAK TE6u sV705GI LpP4yKM04Y= 顶部是浏览器给出的键,底部是getAVal函数返回的值,它是不正确的,导致此消息。 WebSocket握手