我正在尝试遍历Symfony2中的操作返回的JSON数据对象的内容。
无论我使用$ .getJSON还是$ .ajax仍然会抛出dame错误:“未捕获的TypeError:无法使用'in'运算符搜索'636'”
在AJAX请求和以下返回的数据:
$(document).ready(function () {
$('a.parents ').on('click', function (e) {
e.preventDefault();
var newRow = '<table>\n\
<thead>\n\
<tr>\n\
<th>Nom</th>\n\
<th>Prenom(s)</th>\n\\n\
</tr>\n\
</thead>\n\
';
$.getJSON(Routing.generate($(this).attr('data-href'),{id: $(this).attr('data-id')}),
function(data) {
$.each(data.parents, function (i, parent) {
newRow += '<tr><td>' + parent[i].nom + '</td><td>' + parent[i].prenoms + '</td></tr>';
});
newRow += '</table>';
alert(newRow);
},
'json');
});
});
`
该操作返回的样本结果:
{"success":true,"parents":"{\u0022nom\u0022:\u0022Dafn\\u00e9e\u0022,\u0022prenoms\u0022:\u0022Graham\u0022},{\u0022nom\u0022:\u0022G\\u00e9raldine\u0022,\u0022prenoms\u0022:\u0022Phillips\u0022},{\u0022nom\u0022:\u0022H\\u00e9l\\u00e8na\u0022,\u0022prenoms\u0022:\u0022Hernandez\u0022},{\u0022nom\u0022:\u0022Ma\\u00eblla\u0022,\u0022prenoms\u0022:\u0022Perez\u0022},{\u0022nom\u0022:\u0022Illustr\\u00e9e\u0022,\u0022prenoms\u0022:\u0022Dixon\u0022},{\u0022nom\u0022:\u0022Ru\\u00ec\u0022,\u0022prenoms\u0022:\u0022Griffin\u0022},{\u0022nom\u0022:\u0022Rach\\u00e8le\u0022,\u0022prenoms\u0022:\u0022Kennedy\u0022},{\u0022nom\u0022:\u0022B\\u00e9n\\u00e9dicte\u0022,\u0022prenoms\u0022:\u0022Ferguson\u0022},{\u0022nom\u0022:\u0022Gis\\u00e8le\u0022,\u0022prenoms\u0022:\u0022Myers\u0022},{\u0022nom\u0022:\u0022Laur\\u00e9lie\u0022,\u0022prenoms\u0022:\u0022Mason\u0022},{\u0022nom\u0022:\u0022Y\\u00e9nora\u0022,\u0022prenoms\u0022:\u0022Olson\u0022},{\u0022nom\u0022:\u0022L\\u00e9onie\u0022,\u0022prenoms\u0022:\u0022Burns\u0022},{\u0022nom\u0022:\u0022Bj\\u00f6rn\u0022,\u0022prenoms\u0022:\u0022Vasquez\u0022},{\u0022nom\u0022:\u0022M\\u00e9lia\u0022,\u0022prenoms\u0022:\u0022Butler\u0022},{\u0022nom\u0022:\u0022R\\u00e1o\u0022,\u0022prenoms\u0022:\u0022Armstrong\u0022}]"}
我在操作中使用JMS Serializer Bundle,如下所示:
public function trainingCandidatesAction(Request $request,$id) {
$request = $this->get('request');
try{
if ($request->isXmlHttpRequest() || $request->getMethod() == 'GET' || $request->getMethod() == 'POST') {
$em = $this->getDoctrine()->getManager();
$array = $em->getRepository('ParentsBundle:Parents')->getParentsByFormation($id);
$serializer = $this->container->get('jms_serializer');
$jsonContent = $serializer->serialize($array,'json');
}
return new JsonResponse(array('success'=>true, 'parents'=>$jsonContent));
}catch(\Execption $exception)
{
return new JsonResponse(array(
'success' => false,
'code' => $exception->getCode(),
'message' => $exception->getMessage(),
));
}
}
我已经遍历了关于stackoverflow的类似问题的各种建议,但未能正确解决,我一定会丢失一些东西。
最佳答案
首先,要获得干净的JSON,您需要在呈现JsonResponse
之前解码数据:
return new JsonResponse(array(
'success'=>true,
'parents'=> json_decode($jsonContent),
);
那是因为您的数据已经被序列化,并且
JsonResponse
再次对其进行编码。然后,如果那不能解决您的错误,请尝试在使用json之前解析json,例如:
$.each(JSON.parse(data.parents), function(i, parent) {
// ...
});
希望这对您有帮助。
关于javascript - Symfony2 JSON对象-未捕获的错误TypeError:无法使用'in'运算符搜索'636',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36135174/