2011-12-21 3 views
0

Мне нужна помощь с моей веб-службой и вызовом json .. застрял, пытаясь вернуть данные, я сделал это успешно со строками и объектами .. но не с массивом ...ASP.NET Web Service JSON Arrays

My Web Service Содержит:

[WebMethod(EnableSession = true)] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string GetSearchCriteria() 
{ 
    var js = new JavaScriptSerializer(); 
    var obj = HttpContext.Current.Session["mysessionname"]; 
    if (obj == null) 
    { 
     var result = new Criteria[] 
     { 
      new Criteria() { Key = Guid.NewGuid(), Operator = "=", ColumnName = "CheckID", Value = "" } 
     }; 

     var serial = js.Serialize(result); 
     return serial; 
    } 
    else 
    { 
     var serial = js.Serialize((Criteria[])obj); 
     return serial; 
    } 
} 

Критерии является:

[Serializable] 
public class Criteria 
{ 
    public Guid Key { get; set; } 
    public string ColumnName { get; set; } 
    public string Operator { get; set; } 
    public string Value { get; set; } 
} 

Моя страница содержит:

<script type="text/javascript"> 
    function RefreshCriteria() { 
     $.ajax({ 
      type: 'POST', 
      url: '<%= System.Web.VirtualPathUtility.ToAbsolute("~/Services/WebService.asmx/GetSearchCriteria") %>', 
      dataType: 'json', 
      beforeSend: function (xhr) { 
       xhr.setRequestHeader("Content-type", 
          "application/json; charset=utf-8"); 
      }, 
      success: function (data) { 
       $(data).each(function (i) { 
        var obj = data[i]; 
        alert(obj); 
       }); 
      } 
     }); 

    } 

    $(document).ready(function() { 
     RefreshCriteria(); 
    }); 
</script> 

Что я получаю неопределен каждый раз .. пытался делать

$(data).each(function (i) { 
    var obj = data[i]; 
    alert(obj); 
}); 


$(data).each(function (i, obj) { 
    alert(obj); 
}); 

$(data).each(function (i) { 
    alert(this); 
}); 

Нет работал до сих пор ..

ответ

2

вы можете подтянуть Аякса

$.ajax({ 
    type: 'POST', 
    url: '*you need a url here*', 
    dataType: 'json', 
    success: function (data) { 
     $(data).each(function (index, item) { 
     console.log(item); 
     }); 
    } 
}); 

рядом с использованием либо firebug или fiddler отслеживают запрос/ответ, чтобы гарантировать, что вы отправляете и получаете то, что вы ожидали.

+0

Когда я отлаживаю .. последовательная переменная, возвращаемая из веб-службы, показывает «[{\" Key \ ": \" 07bc31be-be37-4fa8-a144-16e0626c1500 \ ", \" ColumnName \ ": \" CheckID \ ", \" Operator \ ": \" = \ ", \" Value \ ": \" \ "}]" – jaekie

+0

ahh .. просто получил его .. должен был сделать успех: function (data) { var obj = jQuery.parseJSON (data.d); $ (obj) .each (функция (i, item) { alert (item.Key); }); } – jaekie

+0

Это потому, что результат, который вы возвращаете, является строкой, поэтому строка json экранирована, поэтому это буквальная строка. попробуйте вернуть массив критериев с вашего веб-сервера (нет необходимости в json reference). Это должно заставить данные аргументировать в jQuery массив объектов json. –

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