Content-Type Ajax json缺失

时间:2015-07-08 23:09:36

标签: javascript jquery ajax json dynatable

我写了一些输出一些有效json的php代码,并在我的开发设置中将content-type标头设置为application / json。但是,当我将此脚本部署到嵌入式Web服务器时,它工作正常,除非它无法发送内容类型。无法运行其他网络服务器。

现在我有Dynatable的以下代码。即使我的开发人员和我的嵌入式网络服务器,提供完全相同的文件,唯一的区别是内容类型。它适用于我的开发设置,但它不适用于我的嵌入式设置。

我使用以下代码将json文件加载到dynatable。

mod

有人可以解释为什么内容类型对ajax如此重要吗?如何手动告诉我的代码json?

2 个答案:

答案 0 :(得分:1)

如果没有content-type,则返回的数据被假定为纯文本。您的代码中没有任何内容可以告诉它。

获取json的一种方法是在jquery代码中指定返回类型。只需将dataType: 'json'添加到a​​jax配置中即可。

或者您可以使用eval()将返回的文本转换为json。

document.ready(
    $.ajax({
        url: 'phpApi.php',
        success: function(data){
            $('#myTable').dynatable({
                dataset: {
                    records: eval(data)
                }
            });
        }
    }));

使用JSON.stringify(eval(data))可以通过确定其json来提供更好的结果。

如下所述,JSON.parse(data)可能更安全。 (毕竟Eval是邪恶的。)

答案 1 :(得分:0)

  

有人可以解释一下为什么内容类型对ajax如此重要吗?

重要的是,客户端可以识别服务器返回的内容类型, content-type:application / json 告诉jQUery将数据解析为对象。如果没有返回内容类型,客户端将假定返回的数据只是纯文本。

  

如何手动告诉我的代码json?

dataType:“json”参数添加到$ .ajax()

document.ready(
    $.ajax({
        url: 'phpApi.php',
        dataType: "json",
        success: function(data){
            $('#myTable').dynatable({
                dataset: {
                    records: data
                }
            });
        }
    }));