23

プロジェクトにZendFramework1.xを使用しています。呼び出し元関数のJSON文字列のみを返すWebサービスを作成したいと思います。私はZend_Controller_Actionそれらの方法を使用して適用しようとしました:

1.1。

$this->getResponse()
     ->setHeader('Content-type', 'text/plain')
     ->setBody(json_encode($arrResult));

2.2。

$this->_helper->getHelper('contextSwitch')
              ->addActionContext('nctpaymenthandler', 'json')
              ->initContext();

3.3。

header('Content-type: application/json');

4.4。

$this->_response->setHeader('Content-type', 'application/json');

5.5。

echo Zend_Json::encode($arrResult);
exit;

6.6。

return json_encode($arrResult);

7。

$this->view->_response = $arrResult;

しかし、cURLを使用して結果を取得すると、いくつかのHTMLタグで囲まれたJSON文字列で返されました。次にZend_Rest_Controller、上記のオプションを使用してユーザーを試してみました。それでも成功しませんでした。

PS:上記の方法のほとんどは、StackOverflowで尋ねられた質問からのものです。

4

4 に答える 4

45

私はこのように好きです!

//encode your data into JSON and send the response
$this->_helper->json($myArrayofData);
//nothing else will get executed after the line above
于 2013-02-08T16:58:51.007 に答える
13

レイアウトとビューのレンダリングを無効にする必要があります。

レイアウトとビューレンダラーを明示的に無効にします。

public function getJsonResponseAction()
{
    $this->getHelper('Layout')
         ->disableLayout();

    $this->getHelper('ViewRenderer')
         ->setNoRender();

    $this->getResponse()
         ->setHeader('Content-Type', 'application/json');

    // should the content type should be UTF-8?
    // $this->getResponse()
    //      ->setHeader('Content-Type', 'application/json; charset=UTF-8');

    // ECHO JSON HERE

    return;
}

jsonコントローラーアクションヘルパーを使用している場合は、アクションにjsonコンテキストを追加する必要があります。この場合、jsonヘルパーはレイアウトとビューレンダラーを無効にします。

public function init()
{
    $this->_helper->contextSwitch()
         ->addActionContext('getJsonResponse', array('json'))
         ->initContext();
}

public function getJsonResponseAction() 
{
    $jsonData = ''; // your json response

    return $this->_helper->json->sendJson($jsonData);
}
于 2013-02-08T21:42:42.863 に答える
9

コンテンツが標準のページテンプレートでラップされないようにするには、コードでレイアウトも無効にする必要があります。しかし、はるかに簡単なアプローチは次のとおりです。

$this->getHelper('json')->sendJson($arrResult);

JSONヘルパーは、変数をJSONとしてエンコードし、適切なヘッダーを設定して、レイアウトと表示スクリプトを無効にします。

于 2013-02-08T16:53:30.883 に答える
1

それははるかに簡単です。

public function init()
{
    parent::init();
    $this->_helper->contextSwitch()
        ->addActionContext('foo', 'json')
        ->initContext('json');
}

public function fooAction()
{
    $this->view->foo = 'bar';
}
于 2016-01-22T07:22:29.297 に答える