解析后的JSON的console.log返回undefined,但在解析之前看起来很好

时间:2014-04-07 17:22:02

标签: javascript jquery ajax json

这使用了几天前很好的工作

让我们说这是我的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

发生了什么事?

4 个答案:

答案 0 :(得分:1)

不要试图自己解析JSON,让jQuery去做。如果您设置了正确的标题(Content-type: application/json),它仍会执行此操作。

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

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

答案 1 :(得分:0)

删除$ .parseJSON(数据)。你不需要它。如果您的数据如下所示,则需要它:

'{"stat":"ok"}'

我猜测服务器以不同方式包装对象并返回不同的对象。这就是为什么它不能工作但不习惯。

答案 2 :(得分:0)

我不知道发生了什么事!但我通过在另一个变量

中解析我的数据来解决它
var parsed = $.parseJSON(data);
console.log(parsed.stat);

答案 3 :(得分:0)

您必须在上面的post请求中指定dataType,它告诉ajax在指定的dataType中执行结果。 $ .post请求中的第四个参数用于指定dataType。即

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

这可以帮到你。