我正在编写来自perl/cgi程序的JSON响应。头部的内容类型需要为"application/json“。但是它似乎不被识别,因为响应是作为文本文件抛出的。
我将使用jQuery的JSON库捕获响应。在发送JSON响应时,我遗漏了什么地方。
发布于 2009-01-12 14:20:29
我是在perl/cgi程序中这样做的。
我在我的代码顶部使用了以下代码:
use CGI qw(:standard);
use JSON;
然后我打印json头文件:
print header('application/json');
它是以下内容的类型:
Content-Type: application/json
然后我像这样打印出JSON:
my $json->{"entries"} = \@entries;
my $json_text = to_json($json);
print $json_text;
我的javascript调用/处理如下:
$.ajax({
type: 'GET',
url: 'myscript.pl',
dataType: 'json',
data: { action: "request", last_ts: lastTimestamp },
success: function(data){
lastTs = data.last_mod;
for (var entryNumber in data.entries) {
//Do stuff here
}
},
error: function(){
alert("Handle Errors here");
},
complete: function() {
}
});
如果您不想安装JSON库,则不必使用它,您可以直接打印JSON格式的文本,但它使得将perl对象转换为JSON非常容易。
发布于 2009-01-12 14:11:58
即使您指定类型为"application/json“,您仍然需要解析文本。jQuery使用$.getJSON函数为您完成此操作,即:
$.getJSON("http://someurl.com/blabla.json",{some: "info"},function(json){
alert(json["aKey"]["anotherOne"]);
});
(这里是specs)。
但也许你已经意识到了这一点,所以问题出在其他地方:你能告诉我们一个你的json响应的样本吗,因为可能问题是它是无效的。我真的不明白为什么你说“似乎没有被识别”:当我编写json服务时,我做的第一个测试是在浏览器上调用它们,也许会触发firebug并尝试解析它(所以,是的,响应是一个文本响应,但javascript解析它并返回一个json对象仍然很高兴)。
https://stackoverflow.com/questions/435442
复制相似问题