У меня есть веб-метод, который возвращает список.
<WebMethod()> _
Public Shared Function populateDropdown(ByVal aptdate As Date, ByVal dentistid As Integer) As List(Of String)
Dim apttime As New List(Of String)
Try
apttime = DatabaseLayer.GetAvailableAppointmentTime(aptdate, dentistid)
Catch ex As Exception
Throw ex
End Try
Return apttime
End Function
Конечный класс
Я хочу заполнить выпадающий список указанным выше набором результатов
Для этого я использую функцию jquery ajax.
$.ajax({
type: "POST",
url: "Appointment.aspx/populateDropdown",
data: '{aptdate:' + '"' + aptdate + '"' + ',dentistid:' + '"' + dentistid + '"' + ' }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
alert(data.d.length);
var options = $("#drpdwnapttime");
$.each(data, function (key,value) {
alert(value);
options.append($("<option />").val(this.data).text(this.data));
});
}
});
Однако, похоже, это не работает. Значение в поле предупреждения равно 11, поэтому я предполагаю, что я правильно собираю массивы. Предупреждение для каждого показывает только один цикл, а затем ничего не происходит. Я не могу понять, что здесь не так. EDit: изменил код, и я добавил изображение предупреждения, которое я получаю внутри $.each. Должен ли я получать только одно значение?
Это работает. Спасибо за все предложения, которые я бы не подумал иначе.
var resultData = data['d'];
$.each(resultData, function (key,value) {
alert(this);
options.append($("<option />").val(value).text(value));
})
Необходимо передать data.d
в $.each(). А поскольку data.d
- это строковый массив, this
должна быть сама строка, а не this.data
...
$.each(data.d, function () {
options.append($("<option />").val(this).text(this));
});
я думаю, что ниже код
options.append($("<option />").val(this.data).text(this.data));
this.data не будет работать, вы должны увидеть свойство данных
например (data.somethingYourProperyname)
jQuery.each передает ключ и значение для обратного вызова:
$.each(data, function(key, value) {
options.append($("<option />").val(value).text(value));
});
Поскольку это список, используйте это для доступа к этому
$.each(data, function () {
options.append($("<option />").val(this).text(this));
}