以json数组的形式恢复或访问数据值

时间:2016-01-27 15:58:43

标签: php jquery json ajax symfony

我有一个Json Response,我回复了这个:

[{"name":"value 1"}]

在我的html.twig中,我试图恢复此值,如:

// note that I recover route parameter in javascript var for slug and confChecked
$.ajax({
  type: "POST",
  url: Routing.generate('get_product_by_all_config', {slug: $(this).val(selectedSlug), confChecked: $(this).val(checkedConfigString)} ),
  dataType: 'json',
  cache: false,
  success: function(data) {
    $('#target').empty();
    $('#target').val(data.name);
    $('#target').append(data.name);
  }
});

这是我的symfony控制器:

// I recover $slug and $parameters by Requesr $request
$entity = $this->getDoctrine()->getRepository('MyBundle:Entity')->getEntityWithParameters($slug, $parameters);

$array = array();
$i = 0;

foreach($entity as $e) {
  $array[$i]['name'] = $e->getName();
  break;
}

$response = new Response();

$data = json_encode($array);

$response->headers->set('Content-Type', 'application/json');
$response->setContent($data);

return $response;

我没有错误,但没有任何反应,价值未显示在input with id #target

我哪里错了?

修改

在我的控制器中我制作了一个dump($response),它返回给我:

Response {#683 ▼
  +headers: ResponseHeaderBag {#696 ▶}
  #content: "[{"name":"value 1"}]"
  #version: "1.0"
  #statusCode: 200
  #statusText: "OK"
  #charset: null
}

我认为问题是我的jQuery / javascript返回var selectedSlugcheckedConfigString的对象。有没有办法将{strong> var值设为php字符串

1 个答案:

答案 0 :(得分:1)

在您的示例中, JSON 数据是array而非对象尝试类似于: data[0].name代替:data.name

您确定生成的路线

Routing.generate('get_product_by_all_config', {slug: $(this).val(selectedSlug), confChecked: $(this).val(checkedConfigString)} )

结构良好?

$(this).val(selectedSlug)$(this).val(checkedConfigString)对我来说似乎很奇怪。

$(this).val(something)设置值并返回一个对象数组,而不是值。

路由可以包含简单类型,例如Number或String。如果要发送复杂数据类型(对象),则必须序列化对象并将其发送到请求正文中(仅限POST)。

您可以在包含对象的ajax请求中添加属性“data”:

$.ajax({
    ...,
    data : {
        someProp : {property : 'value',...}
    },
    ...
});

您可以使用

访问Symfony Action控制器中的这些数据
$this->get("request")->getContent();

在您的情况下,似乎selectedSlug和confChecked是简单类型,因此您可以将它们作为路径参数发送:例如/ myroute / my-slug / 1,具体取决于您的路线配置。