2011-12-26 2 views
1

This question, похоже, имеет ответ на то, что я пытаюсь сделать, но это, похоже, не работает для меня. Сервлет хорошо фиксируется, и в окне просмотра я вижу свой объект json для переменной-члена _parameters сервлета HttpRequest, но я не могу получить параметр.Как читать строку 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; second - это имя параметра Ajax, указанное прямо после data: { и используемое в вызове getParameter.
  2. Если вы действительно просто передаете «автор» и «название», вы можете забыть все о JSON и просто использовать свой оригинальный Javascript плюс req.getParameter("author") и req.getParameter("title").
+0

спасибо! Теперь я могу получить параметр json. На вашей заметке 2) вы говорите, что я мог бы использовать свой код и запрос для «автора» и «названия», но я пробовал это, и он, похоже, не работает, любая идея, почему из моего кода? – JohnIdol

+0

А, я неправильно читаю ваш исходный код: есть одинарные кавычки вокруг объекта (теперь они удалены в моем примере) - именно то, что должна делать функция stringify для вас. Если вы хотите использовать JSON (более общее, но более сложное решение), вы должны использовать функцию stringify и не пытаться генерировать руководство по строке; если вы хотите использовать отдельные параметры (больше HTTP-y-решения), выньте кавычки и получите доступ к параметрам напрямую с помощью 'getParameter() ' – Malvolio

+0

Спасибо за помощь. Я считаю, что вопрос ответил. У меня возникают проблемы с разбором json-объекта ... возможно, для этого попросит другой q и отправьте ссылку ниже. – JohnIdol

Смежные вопросы