提取从 JavaScript 中的 Servlet 返回的 JSON

Extract JSON returned from Servlet in JavaScript

基本上我试图提取从 JavaScript 中的 servlet 返回的 JSON。我已经测试了我的 servlet class,它确实返回了一些 JSON,所以我想我不需要 post class 的代码。这是我返回的 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);

我的URL for servlet包含两个参数,一个是动作,一个是时间:

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 

有什么想法吗?

通过指定 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) {
        }
    });
}

我认为正在发生的事情是 data.d 未定义,因此您收到有关意外 u 的奇怪消息。

试试这个:

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 + "",