0

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

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

我正在使用 Chrome 版本 28.0.1500.95 m。出于某种奇怪的原因,输出被包装在一个带有制表符(即\t)开头的 pre 标记中。

JSON 似乎可以解析,但是当没有发送数据时,我仍然会得到那个制表符。我怎样才能解决这个问题 ?

<pre style="word-wrap: break-word; white-space: pre-wrap;"> {
    "title": "Node",
    "items": [
        {
            "label": "Do stuff",
            "icon": "..\/ui\/images\/icons\/16x16\/icon.png",
            "action": "dostuff"
        }
    ]
}</pre>

编辑:这是 jQuery 端的代码:

$.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
        });
    }
});
4

2 回答 2

2

您需要删除添加<pre>标签的任何代码。这会导致您的响应是无效的 JSON(不过,漂亮打印它的空格不是问题),从而使 jQuery 在解析它时失败。

我在 PHP 文档中看不到任何关于包含 JSON 响应的内容,<pre>但您当然可以在没有标志的情况下尝试它。我还要确保检查标签是否真的在您的回复中。如果您使用 view-source 并安装了 JSON-pretty-printing 浏览器扩展,则它可能由该扩展添加,而不是在您的 JavaScript 代码处理的实际 JSON 中。

于 2013-08-23T20:55:25.230 回答
1

嗯,我正在寻找自己的正确答案,但没有一个有用。但是我尝试按照以下方式进行操作,并且对我有用...

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

2-我使用了 die(json_encode($this->data))而不是echo json_encode($this->data)

希望它对你有用,虽然我想它有点太晚了:D 请原谅我回答了一个我最近遇到同样问题的老问题

于 2017-08-16T06:42:46.567 回答