【问题标题】:JSON.parse: different behaviour over networkJSON.parse:网络上的不同行为
【发布时间】:2016-03-23 10:44:35
【问题描述】:

我有一个静态网站,我在本地机器上使用码头服务器(用于测试)和 github 页面(实时)运行。

两个站点的源代码完全相同。 我使用相同的浏览器(Mozilla Firefox)进行以下测试 我最近将以下代码用于 jQuery Ajax

 $.ajax({
        url: jsonFilePath,
        error: function (response) {... },
        success: function (responsedata) {
            var responsedata = JSON.parse(latestData);
            ...

上面的代码在我的本地服务器上运行时运行良好,但在 github 服务器上运行时失败(相同的浏览器)

它在 github for this reason 上失败了。它在定义如下 dataType 后开始工作

 $.ajax({
            url: jsonFilePath,
            dataType: "json",
            ...

我的问题是,为什么在本地服务器上进行测试时没有发现这个问题?所有的库、数据、json、js、jQuery 文件都是一样的。 是什么导致了这种行为差异?

【问题讨论】:

  • 亲爱的投票者,请告诉我如何改善这个问题:)

标签: javascript jquery json ajax


【解决方案1】:

您尚未在传递给$.ajax 的对象中指定dataType 选项。因此默认为auto。这有两个效果:

  1. 它没有指定在接受请求标头中首选 JSON。除非您的服务器进行内容协商,否则这没有什么区别。
  2. 它根据 Content-Type 响应头处理响应。这就是绊倒你的原因。

如果服务器提供 JSON 并使用 Content-Type 说“这是 JSON”,那么 jQuery 将在将结果传递给 responsedata 之前对其进行解析。这就是 Github 上发生的事情

如果服务器提供 JSON,但使用 Content-Type 说“这是纯文本”(即 如果服务器配置错误),那么 jQuery 不会这样做,你会得到responsedata 中的纯文本字符串。对于其他不正确的内容类型,您会遇到类似的问题。

【讨论】:

  • 没错。问题是 GitHub 已正确配置为使用正确的 MIME 类型(即application/json)传递 JSON,而您的本地服务器不是
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多