【问题标题】:ASP.NET Web Service JSON ArraysASP.NET Web 服务 JSON 数组
【发布时间】:2011-12-21 18:03:51
【问题描述】:

我需要一些关于我的网络服务和 json 调用的帮助.. 试图获取返回的数据时卡住了,我已经用字符串和对象成功地完成了这项工作.. 但不是数组...

我的网络服务包含:

[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);
});

到目前为止还没有工作..

【问题讨论】:

    标签: c# asp.net json web-services post


    【解决方案1】:

    你可以收紧ajax

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

    接下来使用 firebug 或 fiddler 监控请求/响应,以确保您发送和接收的内容符合您的预期。

    【讨论】:

    • 当我调试.. 从 web 服务返回的串行变量显示 "[{\"Key\":\"07bc31be-be37-4fa8-a144-16e0626c1500\",\"ColumnName\ ":\"CheckID\",\"运算符\":\"=\",\"值\":\"\"}]"
    • 啊.. 刚刚得到它.. 必须成功:function (data) { var obj = jQuery.parseJSON(data.d); $(obj).each(function (i, item) { alert(item.Key); }); }
    • 这是因为您返回的结果是一个字符串,因此 json 字符串被转义,所以它是一个文字字符串。试试这个从你的网络服务器返回一个标准数组(不需要 json 引用)。这应该使 jQuery 中的数据争论为一个 json 对象数组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多