我有一个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 selectedSlug
和checkedConfigString
的对象。有没有办法将{strong> var值设为php
的字符串?
答案 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,具体取决于您的路线配置。