2011-07-08 81 views
0

我有一個servlet應用程序,它接受來自HTML表單的用戶輸入,從後端提取所需的數據並生成圖形/圖表並將它們顯示給用戶。 我看到的問題是,如果用戶從下拉列表中選擇第一個選項,一切正常,數據從後端提取 - 我可以在Firebug的AJAX響應中看到它,然後通過json解析它,然後創建地圖。 是從後端接收到的數據是(我所看到的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行出現錯誤,因此用戶看不到圖表。 如果我把警報在回覆功能,

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響應來識別它嗎?

回答

1

Allrit,所以爲了使上述有效的字符串,每個00:00:00-01:00:00(相似)字符串都應該用雙引號引起來。所以,在我的servlet這是從獲取這個數據庫數據的地方,早前我在做

resultSet.getString(1); 

現在我把它改成

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

和它的作品。

1

它看起來像這是服務器端的問題,而不是在Javascript端。當JSON.parse()試圖壓縮responseStr的值時,它會查看數組中的第一個值,即00:00:00-01:00:00。由於這不是引號,它不是有效的字符串,也不是有效的數字,所以JSON.parse失敗。 (在第一個示例中,每個響應值都是一個有效的浮點數,這就是它工作的原因。)

另外,您目前正在解析JSON兩次,一次作爲jQuery ajax請求的一部分,包含在該對象中的字符串。雖然沒有什麼本質上的錯誤,但速度較慢並且可能會產生錯誤。您應該可以將所有內容都編碼到服務器端的單個JSON字符串中,然後直接在Javascript中使用該對象。

+0

這就是原因。有沒有辦法在不改變響應字符串的情況下解決這個問題?我可以讓JSON以某種方式逃脫嗎? – kaykay