Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在控制器中获取json应答_Jquery_Symfony - Fatal编程技术网

Jquery 在控制器中获取json应答

Jquery 在控制器中获取json应答,jquery,symfony,Jquery,Symfony,我正在修改网页中的实体(Symfony:)没有什么特别之处。我目前有一个实体应该被修改。我使用,而不是在编辑之后修改实体,我将修改后的元素存储在json中,当用户确认他的修改时(通过模式对话框确认操作),我将json发送到我的控制器 那是事情变得更糟的时候^^ 我检查了json数组是否包含正确的信息。但当我在控制器中截获请求时,它似乎并不包含我想要的内容。这是我的控制器: public function postorganisationAction(){ $modifFields = a

我正在修改网页中的实体(Symfony:)没有什么特别之处。我目前有一个实体应该被修改。我使用,而不是在编辑之后修改实体,我将修改后的元素存储在json中,当用户确认他的修改时(通过模式对话框确认操作),我将json发送到我的控制器

那是事情变得更糟的时候^^

我检查了json数组是否包含正确的信息。但当我在控制器中截获请求时,它似乎并不包含我想要的内容。这是我的控制器:

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有一些有用的类用于序列化和反序列化实体

这是如何进行的:

  • 定义一种将实体规范化为数组的方法,数组中的每对键/值都将是json字符串中的键/值
  • 导入序列化程序,它将把数组(规范化的实体)转换为json字符串、XML文档或任何您想要的内容
  • 对于第一个操作(规范化实体),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有一些用于序列化和反序列化实体的有用类

    这是如何进行的:

  • 定义一种将实体规范化为数组的方法,数组中的每对键/值都将是json字符串中的键/值
  • 导入序列化程序,它将把数组(规范化的实体)转换为json字符串、XML文档或任何您想要的内容
  • 对于第一个操作(规范化实体),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()