我在自动完成时遇到问题,因为它只返回一条记录,而远程网络服务则返回10项。
想知道你是否可以查看我的代码,看看我做错了什么?
收到的数据:
{ “d”: “[\” 02102008633 \ “\ ”02102008794 \“,\ ”02102008980 \“,\ ”02102015321 \“,\ ”02102018743 \“,\ ”02102024602 \“,\” 02102037454 \ “\ ”02102038366 \“,\ ”02102040774 \“,\ ”02102056369 \“]”}
jQuery(txtDestination).autocomplete({
minLength: 2,
source: function (request, response) {
jQuery.ajax({
url: "/SearchService.asmx/GetDestinationAutocompleteValue?" + "accountCode=" + accountCode.toString() + "&criteria=" + jQuery(txtDestination).val().toString(),
data: "{}",
type: "GET",
contentType: "application/json; charset=utf-8",
success: function (data) {
if (data != null && data.hasOwnProperty('d') && eval(data.d) != null) {
var result = new Array(eval(data.d));
response(jQuery.map(result, function (item, ctr) {
return { label: item[ctr], id: item[ctr], value: item[ctr] }
}));
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) { alert(textStatus + " " + errorThrown); }
});
}
});
万分感谢!
干杯, 安
答案 0 :(得分:1)
我想我找到了......看看这一行:
var result = new Array(eval(data.d));
现在,由于eval(data.d)
已经计算出一个数组,你实际上是在调用这样的东西:
var result = new Array([1, 2, 3]);
实际上会创建一个长度为1的数组 - 其中第一个元素是长度为3的数组。这也让我蒙羞,直到我想在JS控制台中检查它(并且不要让我开始打印输出而不包括方括号......):
js> ra1 = new Array(1, 2, 3)
1,2,3
js> ra2 = new Array([1, 2, 3])
1,2,3
js> ra1.length
3
js> ra2.length
1
但好消息是有一个简单的解决方法:
var result = eval(data.d);
希望这有帮助!