2011-08-15 6 views
1

誰でもこれを行う方法を知っていますか?

$ .getJson()をコントローラに向け、リクエスト引数に基づいてjsonを介してjsonを返すようにしたいとします。残念ながら、ZendはjQueryがそれらをエンコードする以外のgetパラメータを処理するようです。

ZendとjQueryでどうすればいいですか?私はポスト引数についてはstackoverflowで何かを見たが、それはGETになると失われている。

のjQueryを使用する場合、私はこのコードを使用して404エラーを取得:


クライアント側:

$.getJSON("/entry/get-member-course", 
{ 
    "id": 1, 
    "format": "json" 
}, 
function(json) { 
    alert("WIN"); 
}); 

サーバ側:

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

public function getMemberCourseAction() { 
    $this->view->test = Array("test"=>"bleh");   
} 
+0

を提供し、私の更新の答えを参照してください。また、クライアント側のスクリプト – Phil

答えて

1

最も簡単な方法は、コンテキストスイッチを使用することです。お使いのコントローラでは、セットアップの「JSON」コンテキスト

class EntryController extends Zend_Controller_Action 
{ 
    public function init() 
    { 
     $this->_helper->ajaxContext->addActionContext('get-member-course', 'json') 
            ->initContext(); 
    } 

    public function getMemberCourseAction() 
    { 
     $id = $this->_getParam('id'); 

     $this->view->test = array('test' => 'bleh'); 
    } 
} 

呼び出し元のスクリプトのためのビューを使用して、アクションのためのAjaxContextヘルパーはJSONのURLへの参照を含める必要があります。たとえば、デフォルトではこの

$('#get-json').click(function() { 
    var url = this.href; 
    $.getJSON(url, { 
     "format": "json" // this is required to trigger the JSON context 
    }, function(data, textStatus, jqXHR) { 
     // handle response here 
    }); 
}); 

、JSONコンテキストのようなものを持っているでしょう。この

<a id="get-json" href="<?php echo $this->url(array(
    'action'  => 'get-member-course', 
    'controller' => 'entry', 
    'id'   => $someId 
), null, true) ?>">Click me for JSON goodness</a> 

あなたのクライアント側のコードのようなリンクを作成し、あなたのJSONコードは、リンクをクリックすることで解雇されたと言います任意のビュープロパティがJSONとしてシリアル化され、レスポンスで返されます。あなたのビューのプロパティを簡単に変換できない場合は、自動JSONのシリアル化を無効にする必要があります...

$this->_helper->ajaxContext->addActionContext('my-action', 'json') 
          ->setAutoJsonSerialization(false) 
          ->initContext(); 

とJSONビュースクリプトを

// controllers/my/my-action.json.phtml 
$simplifiedArray = array(
    'prop' => $this->someViewProperty->getSomeValue() 
); 
echo Zend_Json::encode($simplifiedArray); 
+0

Zendは、jQueryが作成する引数文字列をどのように解釈するかを知っていますか? –

+0

@Waltどういう意味ですか?私の答えに示されているように、リクエストパラメータにアクセスします。おそらくあなたのJavaScriptコードを表示しておいてください。 – Phil

+0

たとえば、jQueryは、myParam = 1およびmyParam2 = 2のようなクエリ文字列でリクエストを発行しようとしていますが、Zendは/ myParam/1/myParam2/2。あなたが言及したことはそれを迂回するのですか、または要求のURLにすべての議論を移さなければなりませんか? –

0

getJSONは、JSONストリング配列をコード{Person:{name: "Ken", age: "24"}}として、対応するデコーダがありますかあなたのサーバー側で?

JSON PHP

Zend PHP JSON

+0

を表示してください。問題は、サービスへの引数を取得する方法を知っていることです。 –