基本上我试图从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
有什么想法吗?
答案 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 + "",