我有一个servlet应用程序,它从HTML表单中获取用户输入,从后端提取所需数据并生成图形/图表并将其显示给用户。 我看到的问题是,如果用户从下拉列表中选择第一个选项,一切正常,数据从后端提取 - 我可以在firebug中的AJAX响应中看到它,然后由json解析,然后创建映射。 从后端接收的数据是(我在AJAX响应中看到的):
{"responseStr":"[47.636597,-122.189495,0,1,47.643647,-122.212038,0,26,47.505288,-122.339112,0,1,47.622741,-122.314592,0,60,47.541612,-122.129318,0,1,47.568435,-122.161237,0,166,47.682308,-122.196004,0,2,47.666673,-122.284099,0,1,47.612953,-122.316700,0,2,47.600605,-122.322286,0,30,47.589557,-122.315608,0,27,47.636351,-122.327213,0,1,47.630270,-122.177084,2,0,47.630432,-122.140126,17,0,47.621644,-122.132080,1,3,47.630808,-122.153539,86,75,47.622367,-122.337023,495,3466,47.630886,-122.306255,1423,45,47.720287,-122.090885,255,82,47.702376,-122.093340,47,4,47.676897,-122.318752,1,0,47.760994,-122.322550,1,2,47.588854,-122.221273,1,0,39.530179,-119.818395,1,1,47.631306,-122.342762,1,0,47.737242,-122.323710,1,0,47.747054,-122.305083,2,0,47.752018,-122.316452,1,0]"}
然后在json中通过
解析function Respond(REQ){
var res = JSON.parse(REQ.responseText);
var myArr = JSON.parse(res.responseStr);
//forward myArr for processing
}
现在当同一个用户选择选项2时,一切正常,数据从后端提取,我可以在响应中看到以下内容
{"responseStr":"[00:00:00-01:00:00,100,30,0,01:00:00-02:00:00,100,29,0,02:00:00-03:00:00,100,34,0,03:00:00-04:00:00,100,5,0,04:00:00-05:00:00,100,7,0,05:00:00-06:00:00,100,23,0,06:00:00-07:00:00,78,29,0,07:00:00-08:00:00,48,17,0,08:00:00-09:00:00,24,35,0,09:00:00-10:00:00,18,29,0,10:00:00-11:00:00,5,28,0,11:00:00-12:00:00,45,57,0,12:00:00-13:00:00,65,69,0,13:00:00-14:00:00,64,58,0,14:00:00-15:00:00,73,46,0,15:00:00-16:00:00,72,27,0,16:00:00-17:00:00,94,9,0,17:00:00-18:00:00,69,15,0,18:00:00-19:00:00,14,9,0,19:00:00-20:00:00,25,13,0,20:00:00-21:00:00,81,38,0,21:00:00-22:00:00,53,74,0,22:00:00-23:00:00,76,55,0,23:00:00-24:00:00,89,16,0]"}
但是当谈到通过
解析时function Respond(REQ){
var res = JSON.parse(REQ.responseText);
var myArr = JSON.parse(res.responseStr);
//forward myArr for processing
} 在函数的第2行发生了错误,因此用户看不到图表。 如果我在Alertd函数中添加警报,
function Respond(REQ){
var res = JSON.parse(REQ.responseText);
alert('here');
var myArr = JSON.parse(res.responseStr);
alert('here2');
//forward myArr for processing
}
然后我确实看到第一个警报,但不是第二个。但是,对于第一种情况,我看到了两个警报。所以第2行肯定有问题。有人可以通过查看AJAX响应来识别它吗?
答案 0 :(得分:1)
看起来这是服务器端的问题,而不是Javascript方面。当JSON.parse()尝试处理responseStr的值时,它会查看数组中的第一个值,即 00:00:00-01:00:00 。由于这不是引号,它不是有效的字符串,也不是有效的数字,因此JSON.parse失败。 (在第一个示例中,每个响应值都是有效的浮点数,这就是它工作的原因。)
此外,您当前正在解析JSON两次,一次作为jQuery ajax请求的一部分,再次使用该对象中包含的字符串。虽然这没有什么本质上的错误,但它更慢并且可以创建错误。您应该能够将所有内容编码为服务器端的单个JSON字符串,然后直接在Javascript中使用该对象。
答案 1 :(得分:1)
Allrit,所以为了使上面的字符串成为有效字符串,00:00:00-01:00:00(类似)字符串中的每一个都应该用双引号括起来。所以在我的servlet中从数据库中获取这些数据的地方,早些时候我正在做
resultSet.getString(1);
现在我将其更改为
"\"" + resultSet.getString(1)+ "\"";
它有效。