2011-12-26 39 views
1

This question似乎有我正在嘗試做的答案,但它似乎不適用於我。 servlet帖子很好,並且在監視窗口中,我可以看到我的json對象,其中的_parameters成員變量爲servlet HttpRequest,但我似乎無法獲取參數。如何閱讀servlet中的JSON字符串

這是我的代碼。

的Javascript

// build data from input fields 
var jsondata = '{"author":"TEST", "title":"XYZ"}'; 

$.ajax({ 
    type : 'POST', 
    dataType : 'json', 
    data: jsondata, 
    url : '/submitquote', 
    timeout : 5000, 
    success : function(data, textStatus) { 
     // whatever 
    }, 
    error : function(xhr, textStatus, errorThrown) { 
     // whatever 
    } 
}); 

的Servlet(我也試圖與 「作者」 和 「稱號」,但沒有回來):

// get data 
String postData = req.getParameter("jsondata"); 

這是我看到使用變量在請求對象上查看_parameters

{{"author":"TEST", "title":"XYZ"}=} 

我怎麼把這些東西弄出來?

任何幫助表示讚賞!

回答

4

首先,datatype參數指定的數據類型中走出來,而不是數據中去。

其次,data說法應該給的參數的字典,在這種情況下的參數之一是已字符串化JSON對象:

var jsondata = {"author":"TEST", "title":"XYZ"}; 

$.ajax({ 
    type : 'POST', 
    dataType : 'json', 
    data: { jsondata : JSON.stringify(jsondata)}, 
    url : '/submitquote', 
    timeout : 5000, 
    success : function(data, textStatus) { 
     // whatever 
    }, 
    error : function(xhr, textStatus, errorThrown) { 
     // whatever 
    } 
}); 

現在req.getParameter("jsondata")有(仍然JSON-字符串化)的數據,你需要自己解析它。 JSON.org使你可以使用一個非常好的庫。

兩個進一步指出:

  1. 有兩個 「jsondata」 在這裏。首先是JavaScript變量,在第一行中分配並在stringify調用中使用;第二個是在data: {之後指定的並在getParameter調用中使用的Ajax參數名稱。
  2. 如果你真的只是通過「作者」和「標題」,你可以忘記所有關於JSON,只需使用您的原始Javascript加req.getParameter("author")req.getParameter("title")
+0

謝謝!我現在可以像json那樣獲取參數。在你的筆記2)你說我可以使用我的代碼和查詢「作者」和「標題」,但我試過了,它似乎並沒有工作,任何想法爲什麼從我的代碼? – JohnIdol 2011-12-26 04:06:43

+0

啊,我誤解了你的原始代碼:對象周圍有單引號(現在在我的例子中被刪除) - stringify函數應該爲你做什麼。如果你想使用JSON(更一般但更復雜的解決方案),你應該使用stringify函數,而不是嘗試生成字符串手冊;如果你想使用單獨的參數(更多HTTP-y解決方案),請取出引號並直接使用'getParameter()'訪問參數 – Malvolio 2011-12-26 04:10:51

+0

感謝您的幫助。我認爲這個問題回答了。我現在有解析json對象的問題...可能會問另一個q,並張貼下面的鏈接。 – JohnIdol 2011-12-26 05:02:36