以字符串形式恢复或访问 JSON 数组中的数据值


recover or access data values in JSON array as string

我有一个 JSON 响应,它返回以下内容:

[{"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 的对象。有没有办法将 var 值作为 php字符串

在您的

示例中,您的 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) 设置值并返回一个对象数组,而不是值。

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

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

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

您可以在Symfony Action的控制器中访问这些数据

$this->get("request")->getContent();

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