当您尝试将变量作为索引而不是完整类型传递时,它会生成失败:
new:1668 Uncaught TypeError: Cannot read property 'fiscalName' of undefined at Object.success (new:1668) at i (jquery.min.js:2) at Object.fireWith [as resolveWith] (jquery.min.js:2) at A (jquery.min.js:4) at XMLHttpRequest.<anonymous> (jquery.min.js:4)
它表示特征“财政名称”不存在但存在。是在列表中显示“fiscalName”的值,但它不运行以下代码:
for (var i = 0; i <= parsed.length; i++) {
$("#match").append('<li id=' + i + '>' + parsed[i].fiscalName + '</li>');
}
我的控制器
public function clientAction(Request $request) {
$code = $request->get('data');
$encoders = [
new XmlEncoder(),
new JsonEncoder()
];
$normalizers = [new ObjectNormalizer()];
$em = $this
->getDoctrine()
->getManager()
->getRepository('SharkBaseBundle:Person');
$client = $em->findByFiscalName($code);
$serializer = new Serializer($normalizers, $encoders);
$json = $serializer->serialize($client, 'json');
return new JsonResponse(['data' => $json]);
}
控制人员的回答
[
{
"id" : 3,
"taxId" : 1,
"fiscalName" : "drift sl",
"tradename" : "drift",
"residence" : "espa\u00f1a",
"postalCode" : "10600",
"city" : "plasencia",
"province" : "c\u00e1ceres",
"country" : "espa\u00f1a",
"telephoneNumber" : "666666666",
"contactPerson" : "juan",
"contactTelephone" : "666777777",
"email" : "drift@drift",
"twitter" : "drift",
"facebook" : "drift",
"ccc" : "111",
"iban" : "11111111111111",
"bic" : "11111111111",
"bank" : "santander",
"commands" : "ingreso pedido",
"provider" : "true",
"balance" : 10,
"routesid" : {
"id" : 1,
"name" : "valle",
"zone" : "valle del jerte",
"employeeid" : {
"id" : 1,
"name" : "pedro",
"email" : "pedro@pedro.com",
"telephoneContact" : "666666666",
"businessAgent" : "true",
"nif" : "11111111P",
"handicap" : 1,
"__initializer__" : null,
"__cloner__" : null,
"__isInitialized__" : true
},
"__initializer__" : null,
"__cloner__" : null,
"__isInitialized__" : true
},
"className" : null
}
]
JS功能
function buscar(letter) {
$.ajax({
type : "GET",
url : "{{ path('ajax_client') }}",
data : {"data" : letter},
contentType : 'application/json',
dataType : "json",
success : function (data) {
var arr = $.map(data, function (el) {
return el
});
var parsed = JSON.parse(arr);
for (var i = 0; i <= parsed.length; i++) {
$("#match").append('<li id=' + i + '>' + parsed[i].fiscalName + '</li>');
}
$("#match li").on('click', function () {
var idElemet = $(this).attr('id');
console.log(idElemet);
$("#search-input").val($(this).text());
$('input[name="tin"]').val(parsed[idElemet].taxId);
$('input[name="fiscal_name"]').val(parsed[idElemet].fiscalName);
$('input[name="postal_code"]').val(parsed[idElemet].postalCode);
$('input[name="city"]').val(parsed[idElemet].city);
$('input[name="province"]').val(parsed[idElemet].province);
$('input[name="country"]').val(parsed[idElemet].country);
});
}
});
}
HTML
<div class="ibox-content">
<input type="text" placeholder="Buscar..." data-provide="typeahead_2"
onkeyup="buscar($(this).val())" name="query" id="search-input"
autocomplete="off" class="typeahead_2 form-control"/>
<div>
<ul id="match"></ul>
</div>
</div>