提取从 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 + "",
基本上我试图提取从 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 + "",