Я создал веб-сервис C #, который извлекает таблицу данных с 2 столбцами, эта таблица данных сериализуется с помощью JavaScriptSerializer.
Используя FireBug, я вижу следующий JSON, который мне кажется правильным:
"{"d":"[{\"Text\":\"4 blah blah2\",\"Value\":\"16\"},{\"Text\":\"asdf\",\"Value\":\"15\"},{\"Text\":\"qwerty\",\"Value\":\"13\"}]"}"
На стороне клиента я получаю объект, как и ожидалось, используя этот вызов:
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "../../Services/Filter.asmx/GetComboBoxContents",
data: '{ strFilter: "' + selText + '" }',
datatype: "json",
success: function(result) { onGetComboBoxOneContents(result); },
fail: function(result) { alert(result); }
});
Как и ожидалось, вызывается функция onGetComboBoxOneContents (msg), я пробовал множество способов, но не могу разрешить отдельные элементы. Вот последняя версия:
function onGetComboBoxOneContents(msg) {
var evalResult = eval("(" + msg + ")");
var cbo = getComboFilterOneObject;
ClearComboBox(cbo);
for (var i = 0; i < evalResult.d.length; i++) {
AddToComboBox(cbo, evalResult.d[i].Value, evalResult.d[i].Text);
}
}
Цель функции - проанализировать из JSON каждую пару значений и текста и отправить ее в отдельную функцию. Так как я использую .Net 3.5, ожидается d.
Любая помощь очень ценится.
РЕДАКТИРОВАТЬ: я обновил код на стороне клиента ниже, однако msg.d [i] .Value и msg.d [i] .Text в цикле по-прежнему не определены.
function onGetComboBoxOneContents(msg) {
var cbo = getComboFilterOneObject;
ClearComboBox(cbo);
for (var i = 0; i < msg.d.length; i++) {
AddToComboBox(cbo, msg.d[i].Value, msg.d[i].Text);
}
}
РЕДАКТИРОВАТЬ: Я получил его на работу, но он все еще требует от меня использовать eval, вот мое решение, которое работает для меня:
function onGetComboBoxOneContents(msg) {
var evalResult = eval(msg.d);
var cbo = $("#" + getComboFilterOneObject);
ClearComboBox(cbo);
for (var i = 0; i < evalResult.length; i++) {
AddToComboBox(cbo, evalResult[i].Value, evalResult[i].Text);
}
cbo.initializeOptionList();
}