2

ビューから Zend の更新コントローラーに JavaScript オブジェクトを渡そうとしています。

私のJSON文字列は次のようになります:

[{"item_id":null,"parent_id":"none","depth":0,"left":"1","right":4},{"item_id":"1","parent_id":null,"depth":1,"left":2,"right":3}]

variable に割り当てられますjsonObj

私のAJAX投稿は次のようになります:

$.ajax({
            type: "POST",
            url: "http://dev.jp-websolutions.co.uk/cms_nishan/admin/navigation/update",
            data: jsonObj,
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            success: function(data) {
                alert(JSON.stringify(data, null, 4));
            },
            error: function() {
                alert("failure");
            }
        });
        return false;
    }
    ;

そして、私の更新コントローラーは次のとおりです。

public function updateAction() {

        if ($this->getRequest()->isXmlHttpRequest()) {
            $this->_helper->layout()->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
        }

        $data = $this->_request->getPost();
        $result = Zend_Json::decode($data);
        print_r($result);
    }

しかし、私が使用する場合、私はそれを機能させることができません

$result = Zend_Json::decode([{"item_id":null,"parent_id":"none","depth":0,"left":"1","right":4},{"item_id":"1","parent_id":null,"depth":1,"left":2,"right":3}]);

のように正しく表示されます。

Array ( 
[0] => Array ( 
[item_id] => 
[parent_id] => none 
[depth] => 0 
[left] => 1 
[right] => 4 ) 

[1] => Array ( [item_id] => 1 [parent_id] => [depth] => 1 [left] => 2 [right] => 3 ) ) 

どうすればこの仕事を手に入れることができますか?どんな助けでも大歓迎です:)

4

2 に答える 2

0

JSON を識別子なしでリクエスト本文として送信しているため、PHP 側でgetRawBody()は JSON を取得するために使用する必要があります。

$data = $this->getRequest()->getRawBody();

このgetPost()メソッドは、データが contentType の識別子で送信された場合にのみ使用する必要がありますapplication/x-www-form-urlencoded

また、Javascript 変数jsonObjがオブジェクトではなく、JSON を含む文字列であることを確認してください。それがオブジェクトの場合は、する必要がありますjsonObj = JSON.stringify(jsonObj)

Zend Request オブジェクトのドキュメント


または、識別子を付けて JSON を送信することもできます。ajax を次のように変更します。

$.ajax({
            type: "POST",
            url: "http://dev.jp-websolutions.co.uk/cms_nishan/admin/navigation/update",
            data: {json : jsonObj},
            dataType: 'json',
            success: function(data) {
                alert(JSON.stringify(data, null, 4));
            },
            error: function() {
                alert("failure");
            }
        });
        return false;
    };

PHP 側では、以下を使用しますgetPost('json')

$data = $this->_request->getPost('json');
于 2013-07-19T12:07:43.523 に答える
0

ajaxのDataプロパティにオブジェクトを使用し、

$.ajax({
            type: "POST",
            url: "http://dev.jp-websolutions.co.uk/cms_nishan/admin/navigation/update",
            data: {myData: jsonObj,somethingLese: 'else'},
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            success: function(data) {
                alert(JSON.stringify(data, null, 4));
            },
            error: function() {
                alert("failure");
            }
        });
    return false;
}
;

コントローラー では$this->getRequest()->getParam('myData', null);、データにアクセスするために使用します。

public function updateAction() {

        if ($this->getRequest()->isXmlHttpRequest()) {
            $this->_helper->layout()->disableLayout();
            $this->_helper->viewRenderer->setNoRender();
        }

        $data = $this->getRequest()->getParam('myData', null);
        $result = Zend_Json::decode($data);
        print_r($result);
    }

Zend リクエスト

于 2013-07-19T12:12:08.093 に答える