将json数据返回到$ .ajax函数

时间:2016-05-19 13:50:41

标签: javascript jquery json ajax asp.net-mvc

我已经通过web api控制器操作以json的形式回复此行:

var json = await response.Content.ReadAsStringAsync();

响应的简短版本是这样的:

{
    "Response": {
        "ResponseStatus": 1,
        "Error": {
            "ErrorCode": 0,
            "ErrorMessage": ""
        },
        "TraceId": "83b04f8c-f7dd-4755-9767-b0c861ea9e28",
        "Origin": "DEL",
        "Destination": "BOM",
        "Results": [
            [{
                "ResultIndex": "OB12",
                "Source": 6,
                "Fare": {
                    "Currency": "INR",
                    "OtherCharges": 58.29,
                    "ChargeBU": [{
                        "key": "TBOMARKUP",
                        "value": 8.29
                    }, {
                        "key": "CONVENIENCECHARGE",
                        "value": 0
                    }, {
                        "key": "OTHERCHARGE",
                        "value": 50.00
                    }],
                    "Discount": 0,
                },
            }]
        ]
    }
}

完整版显示在http://pastebin.com/eEE72ySk

然后我从webApi Controller返回HttpResponse,将此json var数据发送到CreateResponse方法并返回res,如下所示:

HttpResponseMessage res = Request.CreateResponse(HttpStatusCode.OK, json);
return res;

我必须在视图页面上将此res返回给$ .ajax函数:

$.ajax(
{
    url: "/api/Flight/SearchFlight",
    type: "Post",
    data: $('form').serialize() + '&' + $.param({ 'TokenId': $("#pageInitCounter").val()}, true),
    success: function (data) {
        alert(data);
        var items = [];
        $.each(data, function (key, val) {
            items.push(key + ' : ' + val + '</br>');
        });    
    }
});

我可以在警告框中看到整个内容。 我想知道如何遍历我收到的每一个数据,并将它们的值分配给视图页面上的相应<div>元素。我得到的响应包含几个数组和数组到数组。我很困惑如何管理每一个数据。

2 个答案:

答案 0 :(得分:1)

使用索引器访问数组,对于包含数组的数组,使用

XXX[0][0].YYY

访问第一个数组中的第一个数组。

访问某些属性的代码是

$.ajax(
{
    url: "/api/Flight/SearchFlight",
    type: "Post",
    data: $('form').serialize() + '&' + $.param({ 'TokenId': $("#pageInitCounter").val()}, true),
    success: function (data) {
        var responseStatus = data.Response.ResponseStatus; // returns 1
        var errorCode = data.Response.Error.ErrorCode; // returns 0
        var origin = data.Response.Origin; // returns 'DEL'
        var resultIndex = data.Response.Results[0][0].ResultIndex; // returns 'OB12'
    }
});

数组中的大多数数据似乎只包含一个对象,或者包含一个对象的一个​​数组,如果总是这样,那么使用[0][0][0]访问它将没问题。

对于包含多个对象(例如data.Response.Results[0][0].Fare.ChargeBU)的数组,您可以使用for循环或$.each()循环,例如

$.each(data.Response.Results[0][0].Fare.ChargeBU, function (index, chargeBU) {
    var key = chargeBU.key // returns "TBOMARKUP", "CONVENIENCECHARGE", "OTHERCHARGE"
});

答案 1 :(得分:0)

试试这个

usernameInput.getAttribute("id").then(function(id) {
    var usernameLabel = $("label[for=" + id + "]");
});