我编写了一些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
}
});
}
}));