关于php:Tab并预先包装在Chrome中的JSON输出

Tab and pre wrapped around JSON output in Chrome

我使用这个简单的代码将数组打印为JSON结构。

1
2
header('Content-Type: application/json');
echo json_encode($this->data, JSON_PRETTY_PRINT);

我使用的是Chrome版本28.0.1500.95 m。出于某些奇怪的原因,输出被包装在一个pre标签中,开头有一个tab字符(即\t)。

JSON似乎可以解析,但是当没有发送数据时,我仍然可以得到标签字符。我怎么修这个?

1
2
3
4
5
6
7
8
9
10
[cc lang="php"] {
   "title":"Node",
   "items": [
        {
           "label":"Do stuff",
           "icon":"..\/ui\/images\/icons\/16x16\/icon.png",
           "action":"dostuff"
        }
    ]
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<P>编辑:这是jquery端的代码:</P>[cc lang="php"]$.ajax({
    url :"/myproject/getmenu/",
    type : 'GET',
    dataType:"json",
    success : function(data) {
        //alert(JSON.stringify(data,undefined,2));

        if (jQuery.isEmptyObject(data)) {
            return;
        }

        title = data.title;
        items = data.items;

        selected.contextPopup({
            title : title,
            items : items
        });
    }
});


您需要删除添加标记的任何代码。这会导致您的响应是无效的JSON(不过,预打印的空白空间并不是问题),从而使jquery在解析它时失败。

我在php文档中看不到关于json响应被封装在中的任何内容,但您肯定可以在没有标志的情况下尝试它。我还要确认标签是否在你的回复中。如果您使用视图源代码并安装了一个JSON漂亮的打印浏览器扩展,那么它可能由该扩展添加,而不是由您的javascript代码处理的实际JSON。


嗯,我在寻找一个正确的答案,我自己,但没有一个是有效的。但我试着做以下的事情,这对我很有效…

1-我将内容类型设置为application/json

2-我用了用die(json_encode($this->data))代替echo json_encode($this->data)

希望它对你有用,尽管我想有点晚了。请原谅我回答了一个我最近碰到的问题