我有一个 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 selectedSlug
和 checkedConfigString
的对象。有没有办法将 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,具体取决于您的路由配置。