JavaScriptSerializer возвращает результат в формате:
{d:"[{\"Name\":\"Test 1\",\"Url\":\"url1\"},{\"Name\":\"Test 2\",\"Url\":\"url2\"}]"}
Итак, data.d
даст вам вашу сериализованную строку [{"Name":"Test 1","Url":"url1"},{"Name":"Test 2","Url":"url2"}]
. Это будет ближе к тому, что вы хотите, но вам действительно нужна версия этой строки в массиве JSON. Если вы используете eval(data.d)
вместо data
в своей функции успеха, она будет работать. Следует признать, что использование eval является несовершенным решением, но оно позволяет вашему коду «работать».
В следующем JavaScript есть изменение:
function LoadAutoComplete() {
$("#quickSearchTextBox").autocomplete({
source: function (request, response) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Service.asmx/Test",
data: "{'searchTerm':'" + request.term + "'}",
dataType: "json",
async: true,
success: function (data) {
response($.map(eval(data.d), function (item) {
return {
label: item.Name,
value: item.Url
}
}));
},
error: function (result) {
alert("Error loading the data");
}
});
},
minLength: 2
});