0

目前,以下代码按预期工作,但如果我在代码中的任何位置添加诸如“LANG:en”之类的回声(假设在引导程序中),以下代码将不再工作,我得到这个 ajax 请求响应:

<br/>LANG : en{"response":true,"id":13}

(ajax 响应包含 echo + json 数组),因此我无法打印 id(它将打印:当我尝试访问 data.id 时未定义)。

我的问题是:如何打印我的调试信息并仍然设法执行 ajax 请求?

这是我在控制器中的代码:

public function init()
{
$this->_helper->ajaxContext->addActionContext('retrievecategories', 'json')->initContext();
}

public function retrievecategoriesAction()
    {
        $this->_helper->layout()->disableLayout(); 
        $this->_helper->viewRenderer->setNoRender(true);
        if ($this->getRequest()->isXmlHttpRequest()) {
        if (isset($_POST['id']))
         $id = $_POST['id'];
        $id+=1;
        echo json_encode(array('response' => true, 'id' => $id));
        }
    }

我的js代码:

jQuery(function(){

var obj = {"id":12};

jQuery.ajax({
url: '/search/retrievecategories?json',
type: 'post',
data: obj,
dataType: 'json',
success: function(data){
var id = data.id;
alert(id);
},
error: function(data){
var id = data.id;
alert(id);
}
});

});

我希望我足够清楚。感谢您的时间 !

4

2 回答 2

2

如果您回显 JSON 对象以外的任何内容,则 JQuery 解析器将失败,因为响应不再是有效的 JSON。您可以制作一个自定义解析器来解释响应文本并带走离开 JSON 对象的调试信息,或者您可以将调试信息包含在您编码的数组中。

json_encode(array('data'=>'data','debug'=>'debug info'))

然后检测是否存在调试字段,并在 console.log() 或 alert() 之后将其从对象中删除。

于 2012-07-13T18:57:00.257 回答
1

我强烈建议您阅读有关firePHP的内容。它使用与 Firebug 显示 php 代码中的调试信息相同的控制台。Zend_Log 使用起来非常简单。

于 2012-07-14T11:35:02.600 回答