从JavaScript中提取从Servlet返回的JSON

时间:2015-01-09 02:08:58

标签: javascript json servlets

基本上我试图从JavaScript中提取从servlet返回的JSON。我已经测试了我的servlet类,它确实返回了一些JSON,所以我想我不需要发布该类的代码。这是我返回的JSON格式:

[{"mrtpopAmt":"7000","mrtpopX":"17854.99820","mrtpopY":"35056.35003"},{"mrtpopAmt":"6300","mrtpopX":"29798.58427","mrtpopY":"37036.56434"}]

在我的JavaScript中,我试图将mrtpopAmt,mrtpopX和mrtpopY作为一个对象提取。然后我将所有对象添加到一个数组中:

function getAllMRTPop(time){
var jsonArray;  
var Data = JSON.stringify({ time: time });
$.ajax({
    url: "/TrackNYP/TrackNYPServlet?action=GetAllMrtPop&time="+ Data + "",
    type: "GET",
    data: Data,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        var parsed = JSON.parse(data.d);
        console.log(data.d);
        $.each(parsed, function (i, jsondata) {
            var jsonObject;
            jsonObject.put("mrtpopAmt", jsondata.mrtpopAmt);
            jsonObject.put("mrtstationX", jsondata.mrtstationX);
            jsonObject.put("mrtstationY", jsondata.mrtstationY);
            alert(jsonObject);
            jsonArray.push(jsonObject);
        });;
    },
    error: function (request, state, errors) {
    }
});
}

但是,我收到了Unexpected token: u这样的错误消息:

var parsed = JSON.parse(data.d);

我的servlet URL包含两个参数,一个是action,另一个是time:

http://localhost:8080/TrackNYP/TrackNYPServlet?action=GetAllMrtPop&time=8:00

所以我想知道我是通过在url中传递参数以及上面代码中的数据来正确传递参数的吗?

我想知道哪个部分出了问题?提前谢谢。

修改

所以我已经将我的JavaScript部分更新为:

function getAllMRTPop(time){
var jsonArray = []; 
$.ajax({
    url: "/TrackNYP/TrackNYPServlet?action=GetAllMrtPop&time=8:00",
    type: "GET",
    data: time,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        console.log(data);
        //var parsed = JSON.parse(data.d);
        $.each(data, function (i, jsondata) {
            var jsonObject;
            console.log(mrtpopAmt);
            jsonObject.put("mrtpopAmt", jsondata.mrtpopAmt);
            jsonObject.put("mrtstationX", jsondata.mrtstationX);
            jsonObject.put("mrtstationY", jsondata.mrtstationY);
            jsonArray.push(jsonObject);
        });;
    },
    error: function (request, state, errors) {
    }
});
}

我试图打印出mrtpopAmt并确实返回了一些东西。但是有一条错误消息:

Cannot call method 'put' of undefined 

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

通过指定dataType: "json",jQuery已经知道你将获得JSON响应,没有必要做var parsed = JSON.parse(data.d)

只是做:

var parsed = data.d

修改

function getAllMRTPop(time){
    var jsonArray = [];    
    $.ajax({
        url: "/TrackNYP/TrackNYPServlet?action=GetAllMrtPop&time=8:00",
        type: "GET",
        data: time,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            console.log(data);
            $.each(data, function (i, jsondata) {
                var jsonObject = {};
                jsonObject.mrtpopAmt = jsondata.mrtpopAmt;
                jsonObject.mrtstationX = jsondata.mrtstationX;
                jsonObject.mrtstationY = jsondata.mrtstationY;
                jsonArray.push(jsonObject);
            });;
        },
        error: function (request, state, errors) {
        }
    });
}

答案 1 :(得分:0)

我认为正在发生的事情是data.d未定义,所以你得到关于意外的你的奇怪信息。

请改为尝试:

var parsed = JSON.parse(data);

修改我认为您可能没有正确格式化您的请求:

var Data = JSON.stringify({ time: time });
$.ajax({
    url: "/TrackNYP/TrackNYPServlet?action=GetAllMrtPop&time="+ Data + "",

对我来说,最后一点是&time={"time":"time"},所以你可能想看看如何构建Data。也许直接通过time

url: "/TrackNYP/TrackNYPServlet?action=GetAllMrtPop&time="+ time + "",