Я использую метод .each()
для вызовов ASP.NET WebMethod
, которые возвращают строки JSON. В этом примере он заполняет список значениями, возвращаемыми из вызова Ajax:
async: true,
type: "POST",
url: "Example.aspx/GetValues",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data) {
var list = $('<select />');
$.each(data.d, function(){
var val = this.Value;
var text = this.Text;
list.append($('<option />').val(val).text(text));
});
$('#listbox').empty().append(list.find('option'));
},
ASP.NET имеет встроенный сериализатор JSON, который автоматически преобразует класс в строку JSON, которую вы видите внизу этого поста. Вот пример класса, который может быть возвращен WebMethod
:
public class Tuple
{
public string Text;
public int Value;
public Tuple(string text, int val)
{
Text = text;
Value = val;
}
}
А сам WebMethod
:
[WebMethod]
public static List<Tuple> GetValues()
{
List<Tuple> options = new List<Tuple>();
options.Add(new Tuple("First option", 1));
options.Add(new Tuple("Second option", 2));
return options;
}
Когда вы указываете dataType: "json"
в опциях jQuery Ajax, строка автоматически преобразуется в объект Javascript, поэтому вы можете просто набрать this.Text
или this.Value
для получения данных.
Вот результирующий JSON, полученный из WebMethod
выше:
{"d":[{"Value":1,"Text":"First option"},{"Value":2,"Text":"Second option"}]}
Примечание: параметр data.d
(а также первое значение, видимое в строке JSON) объясняется здесь .