Jquery 在控制器中获取json应答
我正在修改网页中的实体(Symfony:)没有什么特别之处。我目前有一个实体应该被修改。我使用,而不是在编辑之后修改实体,我将修改后的元素存储在json中,当用户确认他的修改时(通过模式对话框确认操作),我将json发送到我的控制器 那是事情变得更糟的时候^^ 我检查了json数组是否包含正确的信息。但当我在控制器中截获请求时,它似乎并不包含我想要的内容。这是我的控制器:Jquery 在控制器中获取json应答,jquery,symfony,Jquery,Symfony,我正在修改网页中的实体(Symfony:)没有什么特别之处。我目前有一个实体应该被修改。我使用,而不是在编辑之后修改实体,我将修改后的元素存储在json中,当用户确认他的修改时(通过模式对话框确认操作),我将json发送到我的控制器 那是事情变得更糟的时候^^ 我检查了json数组是否包含正确的信息。但当我在控制器中截获请求时,它似乎并不包含我想要的内容。这是我的控制器: public function postorganisationAction(){ $modifFields = a
public function postorganisationAction(){
$modifFields = array();
$content = $this->get("request")->getContent();
$this->get('logger')->info('request123456 ');
if (!empty($content))
{
$modifFields = json_decode($content, true);
$repository = $this->getDoctrine()
->getEntityManager()
->getRepository('MyBundle:Organisation');
$organisation = $repository->findById($modifFields["id"]);
$organisation->setFromArray($modifFields);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($organisation);
$em->flush();
}
}
setFromArray函数获取包含元素的数组,例如“name”=>“newname”
当我尝试记录请求、内容或$modifields[“id”]
(如我所说,我检查了JSON中的id在jquery中是否正确)时,日志不会出现
有人知道我做错了什么吗
编辑:
经过一些修改(多亏了ManseUK),我能够:-获取jQuery函数以发送JSON字符串而不是数组(
JSON.stringify(omodifields);
)-解决问题:我在
$organization
中出现了一个强制转换错误,然后我将其转换为所需类型的对象
就是这样^ ^Symfony2有一些有用的类用于序列化和反序列化实体 这是如何进行的:
- 在实体上实现Symfony\Component\Serializer\Normalizer\normalizable接口。您必须填充两个方法,这两个方法将规范化或非规范化为您希望在json中看到的属性数组李>
- 创建您自己的Normalizer类,该类将实现Symfony\Component\Serializer\Normalizer\NormalizerInterface
$serializer = new Symfony\Component\Serializer\Serializer(
array(
new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
new YourOwnCustomNormalizer() //if you created your own custom normalizers
),
array(
'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
)
);
$json = $serializer->serialize($yourEntity, 'json');
return new Response($json);
以及从json字符串检索实体:
$jsonString = $content = $this->get("request")->get('yourString'); //please, check how you retrieve data from your request
$serializer = new Symfony\Component\Serializer\Serializer(
array(
new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
new YourOwnCustomNormalizer() //if you created your own custom normalizers
),
array(
'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
)
);
$entity = $serializer->deserialize($jsonString, '\namespace\to\your\entity', 'json');
Symfony2有一些用于序列化和反序列化实体的有用类 这是如何进行的:
- 在实体上实现Symfony\Component\Serializer\Normalizer\normalizable接口。您必须填充两个方法,这两个方法将规范化或非规范化为您希望在json中看到的属性数组李>
- 创建您自己的Normalizer类,该类将实现Symfony\Component\Serializer\Normalizer\NormalizerInterface
$serializer = new Symfony\Component\Serializer\Serializer(
array(
new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
new YourOwnCustomNormalizer() //if you created your own custom normalizers
),
array(
'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
)
);
$json = $serializer->serialize($yourEntity, 'json');
return new Response($json);
以及从json字符串检索实体:
$jsonString = $content = $this->get("request")->get('yourString'); //please, check how you retrieve data from your request
$serializer = new Symfony\Component\Serializer\Serializer(
array(
new Symfony\Component\Serializer\Normalizer\CustomNormalizer(), //if you implement NormalizableInterface
new YourOwnCustomNormalizer() //if you created your own custom normalizers
),
array(
'json' => new Symfony\Component\Serializer\Encoder\JsonEncoder()
)
);
$entity = $serializer->deserialize($jsonString, '\namespace\to\your\entity', 'json');
记录整个内容->
$this->get('logger')->info(var_dump($content))代码>并查看返回的内容。。。里面什么都没有!下面是发送请求的jQuery:omodifields[“id”]=curOId;警报(curOId);$。post(“组织后”,oModifFields,函数(结果){})代码>你没有发布JSON你发布了一个数组。。。您需要执行以下操作:JSON.stringify(omodifields)代码>so更改$.post(“组织后”,OModifields,函数(结果){})
到$.post(“postOrganization”,JSON.stringify(omodifields);,函数(result){})
我应用了修改,现在发送了一个JSON,但是$content
仍然是空的。要获取内容,请尝试$content=$this->getRequest()->getContent()
记录整个内容->$this->get('logger')->info(var_dump($content))代码>并查看返回的内容。。。里面什么都没有!下面是发送请求的jQuery:omodifields[“id”]=curOId;警报(curOId);$。post(“组织后”,oModifFields,函数(结果){})代码>你没有发布JSON你发布了一个数组。。。您需要执行以下操作:JSON.stringify(omodifields)代码>so更改$.post(“组织后”,OModifields,函数(结果){})
到$.post(“postOrganization”,JSON.stringify(omodifields);,函数(result){})
我应用了修改,现在发送了一个JSON,但是$content
仍然是空的。要获取内容,请尝试$content=$this->getRequest()->getContent()