Ваш код бэкенд должен выглядеть примерно так (WebService.cs в моем примере, который является CodeBehind для WebService.asmx):
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService
{
public class JsonResult
{
public string key, label, open;
public List<Children> children;
}
public class Children
{
public string key, label;
}
[WebMethod]
public List<JsonResult> test()
{
List<Children> child = new List<Children>();
child.Add(new Children
{
key = "211",
label = "Burger"
});
List<JsonResult> result = new List<JsonResult>();
result.Add(new JsonResult
{
key = "1",
label = "Food",
open = "false",
children = child
});
return result;
}
}
Этот код отправляет созданный список в формате JSON - который выглядит как это, когда JQuery получает его:
{"d":[
{
"__type":"WebService+JsonResult",
"key":"1",
"label":"Food",
"open":"false",
"children":[
{
"key":"211",
"label":"Burger"
}
]
}
]}
Затем JQuery AJAX очень просто, например, так:
$.ajax({
type: "POST",
url: "/WebService.asmx/test",
contentType: "application/json",
success: function (response) {
var jsonResponse = response.d;
}
});
Теперь вы можете получить доступ к каждому элементу как к родным объектам JavaScript, как показано здесь в обратном вызове success
при назначении каждому объекту переменной. Теперь вы можете делать все, что хотите, с данными.
success: function (response) {
var jsonResponse = response.d;
for (var i = 0; i < jsonResponse.length; i++) {
var key = jsonResponse[i].key;
var label = jsonResponse[i].label;
var open = jsonResponse[i].open;
var children = jsonResponse[i].children;
for (var a = 0; a < children.length; a++) {
var key = children[a].key;
var label = children[a].label;
}
}
}
Это 100% опробовано и работает. Дайте мне знать, если что-нибудь еще я могу вам помочь.
Вы возвращаете строку, а не JSON. Попробуйте '$ (« # test »). Html (msg);' –
Отдельно, если вы укажете 'contentType' на свой вызов'. .axax', вы несете ответственность за сериализацию данных, которые вы отправляете от клиента, к сервер в этой форме (например, вы не можете выполнять данные: {} '). jQuery только выполняет сериализацию для вас со стандартной кодировкой URI. Если вы не отправляете * JSON на сервер, удалите 'contentType:" application/json "'. –
Ваш фоновый сценарий наверняка не даст вам данных, которые вы ожидаете, только «привет мир» :) – enguerranws