【问题标题】:How to work withJSON data after calling an AJAX function in jQuery在 jQuery 中调用 AJAX 函数后如何处理 JSON 数据
【发布时间】:2011-05-31 04:17:52
【问题描述】:

使用此代码:

 $("#mybutton").click(function(){
           $.ajax({
                url: '/Member/GetPinPoints/@Model.Id',
                type: "POST",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function(data) {
            alert(data);
            },
            error: function() {

            alert("error");
            }
            });


    return false;
});

我收到一个如下所示的 JSON 对象:

[{"Position":1,"Top":182,"Left":20,"Height":73,"Width":90},{"Position":2,"Top":69,"Left":103,"Height":98,"Width":1}]

如果我想提醒每个单独的值,我该如何遍历这些数据?

【问题讨论】:

    标签: c# jquery asp.net json asp.net-mvc-3


    【解决方案1】:

    普通的旧 JavaScript:

    for(var i = 0; i < data.length; i++){
        for(var key in data[i]){
            alert(key + " : " + data[i][key]);
        }
    }
    

    还有 jQuery:

    $.each(data, function(index, element){
        $.each(element, function(key, value){
            alert(key + " : " + value);
        });
    });
    

    您需要在嵌套循环中进行迭代,因为您需要遍历数组中的所有元素,并且对于每个数组元素,遍历所有属性。

    【讨论】:

    • 我也没有关注它。对于现有的数据结构,您的答案似乎是最有效的。 + 给你。
    • @Khepri @naveen 谢谢! @naveen 我认为你的可能是因为你只访问一个属性 (Position),+1 都是一样的。
    • 也许吧。我只是想展示方法。更关心.d的缺席真的:)
    【解决方案2】:

    前面的例子会起作用,但它们很幼稚。不擅长编码的例子只会遍历一个数组,不是很健壮。

    让我们假设您在代码后面的方法中返回键/值对,并且您希望能够根据需要挑选这些数据以供使用。你从这个开始。

    [WebMethod]
        public static Dictionary<string, string> EditPromo(int promoId)
        {
            using (var db = new DataContext())
            {
                var q = db.Promos.Where(x => x.promoID == promoId).Select(x => x).Single();
    
                return new Dictionary<string, string>()
                           {
                               {"code", q.code},
                               {"label", q.label},
                               {"expiredate", string.Format("{0:M/d/yyyy}", q.expireDate)}
                           };
            }
        }
    

    现在我们可以像这样通过 jQuery Ajax 访问它:

    $.ajax({
            url: "/Manager/mPromo/Promo.aspx/EditPromo",
            context: $("#editPromo"),
            data: "{promoId:'" + promoid + "'}",
            success: function (msg)
            {
                var resp = msg.d;
                $("h1:first", this).text("Edit " + resp.code);
                $("input#txtDate", this).val(resp.expiredate);
            }
        });
    

    请注意我是如何创建一个变量来保存 msg.d,称为 resp。然后我可以使用 resp.ReturnedDictionaryKey。上面我使用了使用过的代码和过期日期。我可以随意使用它们。

    【讨论】:

    • 公平地说..anthony 确实询问了“如果我想提醒每个单独的值”的情况
    【解决方案3】:

    试试这个。

    $("#mybutton").click(function(){
        $.ajax({
            url: '/Member/GetPinPoints/@Model.Id',
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function(data) {
                //asp.net 3.5 plus wraps the return into a .d property
                var msg = data.hasOwnProperty("d") ? data.d : data;
                for(var i=0; i < msg.length; i++){
                  alert(msg[i].Position);  
                }
            },
            error: function() {
    
            alert("error");
            }
        });
        return false;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-05
      • 2014-04-19
      • 2012-11-12
      • 2023-03-19
      • 2012-07-06
      • 1970-01-01
      • 2013-06-19
      • 2011-04-14
      相关资源
      最近更新 更多