JSON.parse:网络上的不同行为

时间:2016-03-23 10:44:36

标签: javascript jquery json ajax

我有一个静态网站,我在本地计算机上使用jetty服务器(用于测试)和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",
            ...

我的问题是,为什么在本地服务器上测试期间未捕获到此内容?所有的liberaries,data,json,js,jQuery文件都是一样的。 可能导致这种行为差异的原因是什么?

1 个答案:

答案 0 :(得分:5)

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

  1. 它没有指定在Accept请求标头中首选JSON。除非您的服务器进行内容协商,否则这没有区别。
  2. 它根据Content-Type响应头处理响应。这就是绊倒你。
  3. 如果服务器提供JSON并使用Content-Type说,"这是JSON"然后jQuery会在将结果传递给responsedata之前对其进行解析。这就是Github上发生的事情

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