Json AJAX не работает, проблема в Response? - PullRequest
0 голосов
/ 08 июля 2011

У меня есть приложение сервлета, которое принимает пользовательский ввод из HTML-формы, извлекает необходимые данные из бэкэнда, создает графики и диаграммы и показывает их пользователю. Проблема, которую я вижу, состоит в том, что, если пользователь выбирает первый вариант из выпадающего списка, все работает нормально, данные извлекаются из бэкэнда - я вижу это в ответе AJAX в firebug, а затем его анализирует 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 функции и, следовательно, пользователь не видит диаграмму. Если бы я поместил оповещения в функцию «Ответить»,

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?

Ответы [ 2 ]

1 голос
/ 12 июля 2011

Allrit, поэтому, чтобы сделать вышеприведенную допустимую строку, каждую из 00: 00: 00-01: 00: 00 (похожих) строк следует заключить в двойные кавычки. Так что в месте моего сервлета, который извлекал эти данные из базы данных, раньше я делал

resultSet.getString(1); 

теперь я изменил его на

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

и это работает.

1 голос
/ 09 июля 2011

Похоже, что это проблема на стороне сервера, а не на стороне Javascript.Когда JSON.parse () пытается обработать значение responseStr, он просматривает первое значение в массиве, которое равно 00: 00: 00-01: 00: 00 .Поскольку это не в кавычках, это не допустимая строка и не допустимое число, поэтому JSON.parse не работает.(В первом примере каждое значение ответа является действительным числом с плавающей запятой, поэтому оно работает.)

Кроме того, вы в настоящее время анализируете JSON дважды, один раз как часть запроса jQuery ajax,снова со строкой, содержащейся в этом объекте.Хотя в этом нет ничего плохого, он работает медленнее и может создавать ошибки.Вы должны иметь возможность кодировать все в одну строку JSON на стороне сервера, а затем просто использовать объект непосредственно в своем Javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...