从ajax成功读取json值?

时间:2015-05-15 19:45:49

标签: javascript jquery ajax json

我正在获取JSON数据,如下例所示。现在我希望将每个值都放在单独的变量中,例如

var reviewDate ='2015-06-01T05:00:00Z'

var developers ='Ankur Shah,Srikanth Vadlakonda,Tony Liu, Qiuming Jie

var reviewers = 'mike,john'

var title='Test project'

 var call =$.ajax({
    url:url,
    type:"GET",
    dataType:"json",
    headers:{
        Accept:"application/json;odata=verbose"
    }
 });
 call.done(function(data,textStatus,jqXHR){
     alert("Success!! "+ jqXHR.responseText);
 });
 call.fail(function(jqXHR,textStatus,errorThrown){
      alert("Error retriving Tasks!! "+ jqXHR.responseText);
 });

enter image description here

我在call.done中获得了结果。如何设置这些值?

2 个答案:

答案 0 :(得分:0)

你可以沿着这些方向做点什么:

http://jsfiddle.net/e0mfc1rd/2/

使用Javascript:

    var data = {
    results: {
        Date_x0020_of_x0020_Review: '2015-06-01T05:00:00Z',
        Name_x0020_of_x0020_Developers: {
            results: [
                {
                    __metadata: {},
                    Title: 'Ankur Shah'
                },
                {
                    __metadata: {},
                    Title: 'Tony Liu'
                },
                {
                    __metadata: {},
                    Title: 'Qiuming Jie'
                }
            ]
        },
        Name_x0020_of_x0020_Reviewers: {
            results: [
                {
                    __metadata: {},
                    Title: 'Mike'
                },
                {
                    __metadata: {},
                    Title: 'John'
                }
            ]
        }
    }
}

// map the key names.
// you could do something more clever here, like just extracting
// the segment after the last underscore using substring or a regex,
// but for this example we'll do a simple map.
var names = {
    'Name_x0020_of_x0020_Reviewers': 'reviewers',
    'Name_x0020_of_x0020_Developers': 'developers'
}

// a variable to hold the result.
var processed = {};

// iterate over each key in data.results
// (e.g. 'Name_x0020_of_x0020_Developers', 'Name_x0020_of_x0020_Reviewers', etc.)
Object.keys(data.results).forEach(function(k) {
    // if the object indexed at that key has a 'results' property that is an array...
    if (Array.isArray((data.results[k] || {}).results)) {
        // pluck the Title attribute from each of those entries into a new array.
        var values = data.results[k].results;
        var titles = values.map(function(v) {
            return v.Title;
        });

        // translate keys like 'Name_x0020_of_x0020_Reviewers'
        // into something more palatable
        var key = names[k] || k;

        // join the titles into a string, separated by a comma
        processed[key] = titles.join(',');
    }
    else if (k.indexOf('Date') === 0) { // key starts with 'Date'
        processed[k] = new Date(data.results[k]);
    }
});

之后变量'processed'将包含:

{
    "Date_x0020_of_x0020_Review": "2015-06-01T05:00:00.000Z",
    "developers": "Ankur Shah,Tony Liu,Qiuming Jie",
    "reviewers": "Mike,John"
}

答案 1 :(得分:0)

您还可以使用UnderscoreJS从JSON获取数据。

你需要链接一些SimpleXMLElement个电话,你应该得到你的数据。

请在jsFiddle找到以下演示文稿。

要将pluck对象转换为逗号分隔格式,请使用例如:parsed

var developers = parsed.developers.join(',');
var resultJSON = {
    d: {
        __metadata: {},
            "Name_x0020_of_x0020_Developers": {
            "results": [{
                "Title": "Ankur Shah"
            }, {
                "Title": "Srikanth"
            }, {
                "Title": "Tony Liu"
            }]
        },
            "Name_x0020_of_x0020_Reviewers": {
            "results": [{
                "Title": "Name1"
            }, {
                "Title": "Name2"
            }, {
                "Title": "Name3"
            }]
        }
    }
};

//console.log(resultJSON);

var names = {
    developers: 'Name_x0020_of_x0020_Developers',
    reviewers: 'Name_x0020_of_x0020_Reviewers'
};

var parsed = {};

_.each(names, function (name, key) {
    parsed[key] = _.chain(resultJSON) // key is developers, reviewers
        .pluck(name) // is the name in the JSON e.g. Name_..._Developers
        .pluck('results')
        .tap(function (data) { // tap is optional and can be removed
            console.log('before flatten', data); // it shows the nesting [[]]
        })
        .flatten(true) // used to remove outer array
        .tap(function (data) {
            // we now have the result. Next, get the title
            console.log('before getting the Title', data);
        })
        .pluck('Title')
        .value();
});

console.log(parsed);
document.getElementById('output').innerHTML = JSON.stringify(parsed, null, 2);