0

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

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

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

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

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

4

2 回答 2

1

如果没有内容类型,则假定返回的数据是纯文本。您的代码中没有其他内容可以说明。

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

或者您可以使用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 是邪恶的。)

于 2015-07-08T23:13:22.113 回答
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
                }
            });
        }
    }));
于 2015-07-08T23:20:15.173 回答