2011-07-08 10 views
0

私は、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]"} 

同じユーザがオプション2、すべての作品を選択した今とき、これはその後、

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

経由でJSONに解析されます罰金、データがバックエンドから抽出され、私は応答

{"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(類似)の各文字列を二重引用符で囲む必要があります。だから、データベースからこのデータをフェッチして、私のサーブレットでの場所で、以前の私は

resultSet.getString(1); 

をしていた今私は

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

にそれを変更し、それが動作します。

1

これは、Javascript側ではなく、サーバー側で問題が発生しているようです。 JSON.parse()がresponseStrの値をクランチしようとすると、配列の最初の値である00:00:00-01:00:00が検索されます。引用符で囲まれていないので、有効な文字列でも有効な数字でもないので、JSON.parseは失敗しています。 (最初の例では、すべての応答値が有効な浮動小数点数であるため、動作します)

また、JSONを2回解析しています.1度はjQuery ajaxリクエストの一部としてそのオブジェクトに含まれる文字列本質的に間違っていることは何もありませんが、遅くなり、バグが発生する可能性があります。あなたはサーバー側ですべてのものを1つのJSON文字列にエンコードして、そのオブジェクトをJavascriptで直接使用することができます。

+0

それが理由です。レスポンス文字列を変更せずにこの問題を克服する方法はありますか? jsonを何とかエスケープさせることができますか? – kaykay