我写了一些输出一些有效json的php代码,并在我的开发设置中将content-type标头设置为application / json。但是,当我将此脚本部署到嵌入式Web服务器时,它工作正常,除非它无法发送内容类型。无法运行其他网络服务器。
现在我有Dynatable的以下代码。即使我的开发人员和我的嵌入式网络服务器,提供完全相同的文件,唯一的区别是内容类型。它适用于我的开发设置,但它不适用于我的嵌入式设置。
我使用以下代码将json文件加载到dynatable。
mod
有人可以解释为什么内容类型对ajax如此重要吗?如何手动告诉我的代码json?
答案 0 :(得分:1)
如果没有content-type,则返回的数据被假定为纯文本。您的代码中没有任何内容可以告诉它。
获取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是邪恶的。)
答案 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
}
});
}
}));