在jQuery中调用AJAX函数后如何使用JSON数据

时间:2011-05-31 04:17:53

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

使用此代码:

 $("#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}]

如何迭代这些数据,如果我想提醒每个单独的值?

4 个答案:

答案 0 :(得分:4)

普通的旧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);
    });
});

您需要迭代嵌套循环,因为您需要遍历数组中的所有元素以及每个数组元素,请遍历所有属性。

答案 1 :(得分:1)

之前的例子可行,但它们很幼稚。不擅长编码的例子只会循环遍历一个不太健壮的数组。

让我们假设您在代码隐藏方法中返回键/值对,并希望能够根据需要选择使用这些数据。你从这开始。

[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。上面我用过的代码和expiredate。我可以随意使用它们。

答案 2 :(得分:0)

试试这个。

$("#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;
});

答案 3 :(得分:-1)

如果这样可以更容易使用,您还可以pass it back into a JavaScript array。尽管JavaScript数组不能将键,对象和数组放在一起,但它的行为有点像关联数组。