2014-04-07 56 views
0

之前看起来很好,这种用科技工作的前的console.log解析的JSON的返回undefined,但分析

精细取消平铺几天让说这是我的PHP脚本:

echo json_encode (array('stat'=>'ok')); 

我发送一个AJAX请求该脚本:

$.post(base_url+'line/finalize/' , {type:selected_type } , function(data){ 
    bet_inprog = false ; 
    console.log('-------------------*'+data); 
    data = $.parseJSON(data); 
    console.log('-------------------*'+data); 
    console.log('-------------------*'+data.stat); 
} 

的萤火我看到它返回

{"stat":"ok"} 

在控制台中我得到

-------------------*{"stat":"ok"} 

-------------------*[object Object] 

-------------------*undefined 

是怎么回事?

+0

你看到了什么,如果你做'的console.log(数据)'解析后?摆脱你添加到它的字符串,只记录对象。 –

+0

对我来说,它工作正常。你确定它是未定义的吗? :) –

+0

@RocketHazmat我已经有了......它返回'[object Object]' – max

回答

0

删除$ .parseJSON(数据)。你不需要它。你会需要它,如果你的数据是这样的:

'{"stat":"ok"}' 

我猜服务器不同包装的对象,并返回一个不同的对象。这就是为什么它不工作,但它曾经。

+0

我认为他*不需要'$ .parseJSON (数据)'。他的第一个'console.log'输出了“{”stat“:”ok“}'和第二个'[object Object]'。这意味着他*将*字符串解析为一个对象。 –

+0

@RocketHazmat - 我不知道。当我创建一个小提琴并运行他的代码时,如果我使用新版本的jQuery,它会在json解析中爆炸。如果我使用旧版本(1.6.4),解析后的数据返回null,然后在尝试访问空对象的prop时爆炸。我使用Chrome btw。 – VtoCorleone

+0

这是因为jsFiddle使用正确的Content-Type标头发送了JSON。这导致jQuery自动为你解析它。在OP的例子中情况并非如此。 –

1

不要试图自己解析JSON,让jQuery来做。无论如何,如果你设置了正确的标题(Content-type: application/json),它会这样做。

如果您将第四个参数传递给$.post,您可以告诉jQuery自动处理解析。

$.post(base_url+'line/finalize/', {type:selected_type}, function(data){ 
    console.dir(data); 
    console.log(data.stat); 
}, 'json'); 
0

我donnu发生了什么事情!但我在另一个变量

var parsed = $.parseJSON(data); 
console.log(parsed.stat); 
0

您必须指定在上述职位的要求,这告诉阿贾克斯Accpet头,结果在指定的数据类型具体的数据类型解析我的数据解决。 $ .post请求中的第四个参数用于指定dataType。即

$.post(base_url+'line/finalize/' , {type:selected_type } , function(data), 'JSON'){ 
console.log('-------------------*'+data.stat); 
} 

这将做你的工作..

+0

这不是','json'去的地方。这甚至不是有效的JavaScript语法! –