0

コントローラーアクションからハローワールド文字列のみを返したい小さなajaxアプリケーションを試しています。Hello worldを返していますが、これに伴い、テンプレートファイルも返しています。controlelrのアクションで次のコードを使用して、テンプレートを無効にしようとしました

$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender( true );

しかし、これは私にこのエラーを返します

SCREAM: Error suppression ignored for
( ! ) Notice: Undefined property: Survey\Controller\SurveyController::$_helper in C:\wamp\www\zend\module\Survey\src\Survey\Controller\SurveyController.php on line 55

SCREAM: Error suppression ignored for
( ! ) Fatal error: Call to a member function layout() on a non-object in C:\wamp\www\zend\module\Survey\src\Survey\Controller\SurveyController.php on line 55
Call Stack

これを修正するにはどうすればよいですか?

編集

コントローラを次のように変更しました

public function registerAction()
{
    $result = new JsonModel(array(
        'some_parameter' => 'some value',
        'success'=>true,
    ));

    return( $result );
}

モジュール appl ディレクトリの module..module.config に戦略を追加

'strategies' => array(
    'ViewJsonStrategy',
),

それでも、ajax 応答では、テンプレートが返されます

4

6 に答える 6

2

ここに確かな例があります:

http://akrabat.com/zend-framework-2/returning-json-from-a-zf2-controller-action/

JsonMoodels を使用して Json Response を送り返す必要があります。

于 2013-02-15T10:07:48.377 に答える
0

ajax リクエストを送信してレスポンスを処理する最も簡単な方法は、zf2 モジュールの WasabiLib https://github.com/WasabiLib/wasabilib_zf2_skeleton_applicationです。

ajaxリクエストを発生させたい要素のclass-attributeに「ajax_element」を追加するだけです。フォームの送信、リンク、ボタンのいずれであっても問題ありません。例のページhttp://www.wasabilib.org/application/pages/examplesにアクセスしてください。 あなたのアプリケーションが ajax を多用するなら、このモジュールをお勧めします。

于 2015-12-14T11:52:37.723 に答える
-2

これは私のために働きます:

public function ajaxAction(){
    $data = array(
        'var1' => 'var1Value',
        'var2' => 'var2Value',
    );

    $response = $this->getResponse();
    $response->setStatusCode(200);
    $response->setContent(json_encode($data));

    $headers = $response->getHeaders();
    $headers->addHeaderLine('Content-Type', 'application/json');

    return $response;
}

出力:

{"var1":"var1Value","var2":"var2Value"}
于 2013-02-14T04:34:43.230 に答える