3

AJAXを介してリクエストを送信するときに、レイアウトのレンダリングを停止するにはどうすればよいですか..私が直面している問題は、jsonデータがブラウザにエコーされ、jqueryのコールバック機能に渡されないことです

これが私のスクリプトです

jQuery.ajax({
    url: "/getPrivileges",
    type: "POST",
    dataType: 'JSON',
    success: function(privileges){
        alert('hellooo');

        buildTree(privileges,".privBox h2");
        if($(".privPrivilege"))
            $("#loading").css("visibility","hidden");
    },
    error: function (request, status, error) {
        alert('Error'+request.responseText);
    }

});

そしてこれがルーティングです

resources.router.routes.privilege.route = /getPrivileges
resources.router.routes.privilege.defaults.module = privileges
resources.router.routes.privilege.defaults.controller = privilege
resources.router.routes.privilege.defaults.action = get-privileges

これが私のコントローラーです

  public function getPrivilegesAction() {

        if ($this->getRequest()->isXmlHttpRequest()) {
         ...........
         ...........
          $this->_helper->json($appPrivArray);
          $this->_helper->viewRenderer->setNoRender(TRUE);
          $this->_helper->layout->disableLayout();
          $response = $this->getResponse();
          $response->setHeader('Content-type', 'application/json', true);
   }


 }

最初に、そのレイアウトがまだレンダリングされていることに直面しましたが、get-privileges.phtml ビュー ページがなくても、json が画面に出力されます。

そしてコントローラのinit()メソッドで、私はこのようにします

 public function init() {
    $ajaxContextSwitch = Zend_Controller_Action_HelperBroker::getStaticHelper('AjaxContext');
    $ajaxContextSwitch->setDefaultContext('json');
    $ajaxContextSwitch->addActionContext('getPrivileges', 'json');
    $ajaxContextSwitch->initContext();
}

jqueryのコールバック機能に応答を配信するにはどうすればよいですか! すべての URL にカスタム ルートがあるわけではないことに注意してください。

Zend フレームワークを使用した開発からほぼ引退するので、助けてください !!

4

2 に答える 2

1

JSON データは、「ブラウザーにエコーされる」ことによって jQuery (またはその他のライブラリー) に返されます。これが、コールバックがデータを受け取る方法です。

JSON ビュー ヘルパーは、レイアウトを無効にするだけでなく、Content-Typeヘッダーを に設定するapplication/jsonので、それを行う必要はありません。

setNoRender(true)特定のアクションのビュー スクリプトがない場合は、引き続き使用できます。

このコードはうまくいくはずだと思います:

public function getPrivilegesAction() {
    if ($this->getRequest()->isXmlHttpRequest()) {
        $this->_helper->viewRenderer->setNoRender(TRUE);
        $this->_helper->json($appPrivArray);
    }
}

Javascript エラーが表示されるか、alert('hello')実行されませんか?

于 2012-05-20T17:09:38.250 に答える
1

アクションでは、使用するだけです

$this->_helper->json($appPrivArray)

使用する必要はありませsetNoRenderん。そして、使用する必要のないJavascriptではdataType: 'JSON', 、これをテストしましたが、正常に動作するはずです。

于 2012-05-20T17:20:09.120 に答える