对当前路径的Ajax请求请求`text / html`而不是`application / json`

时间:2015-02-05 16:06:26

标签: javascript jquery ajax json

我有两个几乎相同的JQuery请求,我在页面加载后发出,第一个请求json为当前路径,第二个请求不同的url。不过,我很惊讶地看到第一个请求typetext/html,第二个请求是application/json。我原本预计两者都是application/json。请求看起来像这样:

$.ajax({
  url: window.location.pathname,
  type: 'GET',
  dataType: 'json',
  success: doSomething
});

$.ajax({
  url: '/tags',
  type: 'GET',
  dataType: 'json',
  success: doSomethingElse
});

然而,在我看到的网络标签中:

enter image description here

我错过了什么?

2 个答案:

答案 0 :(得分:2)

dataType: 'json'有两个主要影响:

  1. 它导致jQuery忽略从服务器返回的文档的内容类型,并将其视为JSON,无论
  2. 它设置一个请求JSON
  3. 的Accept标头(用于HTTP内容协商)

    如果服务器具有不同格式的内容表示,则可以使用HTTP content negotiation来决定放入响应的内容。大多数服务器都没有。

    看起来你的不是。它将始终返回第一个URL的HTML,并始终返回第二个URL的JSON。

    如果您希望服务器关注Accept标头,则必须对其进行配置(以及提供文档的JSON版本以及HTML版本)。

答案 1 :(得分:1)

显示的内容类型是服务器发送给您的响应类型,而不是您要发送给服务器的请求类型。