我正在尝试将javascript对象从视图传递到Zend中的更新控制器。
我的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}]
并将其分配给变量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 ) )
我怎样才能完成这项工作?任何帮助将不胜感激:)
答案 0 :(得分:0)
您发送JSON作为请求正文,没有标识符,所以在PHP方面,您需要使用getRawBody()
来获取JSON:
$data = $this->getRequest()->getRawBody();
仅当使用contentType getPost()
的标识符提交数据时,才应使用application/x-www-form-urlencoded
方法。
还要确保您的Javascript变量jsonObj
是包含JSON的字符串,而不是对象。如果它是一个对象,则必须jsonObj = JSON.stringify(jsonObj)
。
或者,您可以使用标识符发送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');
答案 1 :(得分:0)
在ajax
中使用数据属性的对象$.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);
}