Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Json AJAX不工作,响应出现问题?_Javascript_Json - Fatal编程技术网

Javascript Json AJAX不工作,响应出现问题?

Javascript Json AJAX不工作,响应出现问题?,javascript,json,Javascript,Json,我有一个servlet应用程序,它从HTML表单中获取用户输入,从后端提取所需数据,生成图形/图表,并向用户显示。 我看到的问题是,如果用户从下拉列表中选择第一个选项,一切正常,数据从后端提取——我可以在firebug中的AJAX响应中看到它,然后通过json解析它,然后创建映射。 从后端接收的数据是(我在AJAX响应中看到的): 然后通过json对其进行解析 function Respond(REQ){ var res = JSON.parse(REQ.responseText); v

我有一个servlet应用程序,它从HTML表单中获取用户输入,从后端提取所需数据,生成图形/图表,并向用户显示。 我看到的问题是,如果用户从下拉列表中选择第一个选项,一切正常,数据从后端提取——我可以在firebug中的AJAX响应中看到它,然后通过json解析它,然后创建映射。 从后端接收的数据是(我在AJAX响应中看到的):

然后通过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行出现错误,因此用户看不到图表。 如果我将警报设置为响应功能

function Respond(REQ){
   var res = JSON.parse(REQ.responseText);       
   alert('here');
   var myArr = JSON.parse(res.responseStr);
   alert('here2');
   //forward myArr for processing
}

然后我确实看到了第一个警报,但没有看到第二个。但是,对于第一种情况,我看到两个警报。所以第二行肯定有问题。有人能通过查看AJAX响应来识别这一点吗?

看起来这是服务器端的问题,而不是Javascript端的问题。当JSON.parse()尝试压缩responsest的值时,它会查看数组中的第一个值,即00:00:00-01:00:00。由于这不在引号中,因此它不是有效字符串,也不是有效数字,因此JSON.parse失败。(在第一个示例中,每个响应值都是有效的浮点数,这就是它工作的原因。)


另外,您当前正在解析JSON两次,一次作为jQueryAjax请求的一部分,另一次使用该对象中包含的字符串。虽然这本身并没有什么问题,但速度较慢,可能会产生bug。您应该能够在服务器端将所有内容编码为单个JSON字符串,然后直接在Javascript中使用该对象。

Allrit,因此为了使上述内容成为有效字符串,00:00:00-01:00:00(类似)字符串中的每一个都应该用双引号括起来。所以在我的servlet中的一个从数据库中获取数据的地方,我之前正在做

resultSet.getString(1); 
现在我把它改成了

"\"" +  resultSet.getString(1)+ "\"";

它是有效的。

这可能就是原因。有没有一种方法可以在不更改响应字符串的情况下解决此问题?我能让json逃脱这一切吗?
"\"" +  resultSet.getString(1)+ "\"";