2014-12-12 3 views
1

Я пытаюсь заполнить переменную в этом формате, используя JQuery Ajax, но из-за всех скобок, я не могу вернуть данные в формате с бэкэндомJQuery Ajax заполняет Javascript переменной вопрос

elements = [{ 
    key: 1, 
    label: "Food", 
    open: false, 
    children: [ 
     { key: 211, label: "Burger" } 
    ] 
}]; 

Здесь это код, я в настоящее время с помощью которого не работает

menu.aspx:

$.ajax({ 
    type: "POST", 
    url: "menu.aspx/get_menu", 
    data: {}, 
    contentType: "application/json", 
    dataType: "json", 
    success: function (msg) { 
     $("#test").html(msg.d); 
    } 
}); 

бэкенд:

[WebMethod(EnableSession = false)] 
public static string get_menu() 
{ 
    return "hello world"; 
} 
+5

Вы возвращаете строку, а не JSON. Попробуйте '$ (« # test »). Html (msg);' –

+0

Отдельно, если вы укажете 'contentType' на свой вызов'. .axax', вы несете ответственность за сериализацию данных, которые вы отправляете от клиента, к сервер в этой форме (например, вы не можете выполнять данные: {} '). jQuery только выполняет сериализацию для вас со стандартной кодировкой URI. Если вы не отправляете * JSON на сервер, удалите 'contentType:" application/json "'. –

+0

Ваш фоновый сценарий наверняка не даст вам данных, которые вы ожидаете, только «привет мир» :) – enguerranws

ответ

0

Ваш код бэкенд должен выглядеть примерно так (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% опробовано и работает. Дайте мне знать, если что-нибудь еще я могу вам помочь.

Смежные вопросы