Content-Type Ajax json missing



我编写了一些php代码,输出一些有效的json,并在我的开发设置中将内容类型头设置为application/json。然而,当我将这个脚本部署到嵌入式web服务器时,它工作得很好,除了它不能发送内容类型。无法运行其他web服务器

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

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

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

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

如果没有内容类型,则假定返回的数据是纯文本。在你的代码中没有什么可以告诉它。

获取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毕竟是邪恶的)

那么有人能解释一下为什么内容类型对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
                }
            });
        }
    }));

相关内容

最新更新