0

現在、次のコードは意図したとおりに機能しますが、コードのどこかに「LANG: en」などのエコーを追加すると (ブートストラップとしましょう)、次のコードは機能しなくなり、次の ajax リクエスト応答が返されます。

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

(ajax 応答には echo + json 配列が含まれています) したがって、id を出力できません (data.id にアクセスしようとすると : undefined が出力されます)。

私の質問は次のとおりです: どうすればデバッグ情報を出力し、それでも 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 オブジェクト以外をエコーすると、応答が有効な JSON ではなくなるため、JQuery パーサーは失敗します。応答テキストを解釈し、JSON オブジェクトを残してデバッグ情報を取り除くカスタム パーサーを作成するか、エンコードする配列にデバッグ情報を含めることができます。

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

次に、debug フィールドが存在するかどうかを検出し、console.log() または alert() の後にオブジェクトから削除します。

于 2012-07-13T18:57:00.257 に答える
1

firePHPについて読むことを強くお勧めします。Firebug が PHP コードからのデバッグ情報を表示するために使用するのと同じコンソールを使用します。Zend_Log を使用するのは非常に簡単です。

于 2012-07-14T11:35:02.600 に答える