繁体   English   中英

内容类型Ajax json丢失

[英]Content-Type Ajax json missing

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

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

我使用以下代码将json文件加载到可动态生成的文件中。

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)可能会更安全。 (毕竟,评估是邪恶的。)

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM