Я хочу отправить некоторые данные из JavaScript в Java-сервлет с помощью JSON. Но у меня проблемы с этим.
Это мой код JavaSript:
var myData = {"someNumber":34,"someDate":"May 22, 2014 12:00:00 AM","expiryDate":"May 29, 2014 12:00:00 AM","anotherNumber":3,"customerNumber":56,"name":"John Dow","type":"notype","someSize":"XXL","noMonth":11,"notes":"some notes here","colour":"Black"};
$.ajax({
url : "customerAdd",
type: "get",
data: {"myData" : JSON.stringify(myData)},
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(msg) {
alert(msg);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("jqXHR: " + textStatus);
console.log("textStatus: " + textStatus);
console.log("errorThrown: " + errorThrown);
}
});
Это мой код Java:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
Gson gson = new GsonBuilder().create();
Customer customer = gson.fromJson(request.getParameter("myData"), Customer.class);
System.out.println(customer.toString());
}
В результате я получаю сообщение об ошибке в JavaScript:
"textStatus: parsererror"
"errorThrown: SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data"
Что случилось с моим кодом?
PS Я создаю myData в JavaScript таким образом:
var myData = {
someNumber: + $("#someNumber").val(),
someDate: $("#someDate").val(),
expiryDate: $("#expiryDate").val(),
anotherNumber: + $("#anotherNumber").val(),
customerNumber: + $("#customerNumber").val(),
name: $("#name").val(),
type: $("#type").val(),
someSize: $("#someSize").val(),
noMonth: + $("#noMonth").val(),
notes: $("#notes").val(),
colour: $("#colour").val() };
Вот пример JSON.stringify:
JSON.stringify({x: 5, y: 6}); // '{"x":5,"y":6}'
Вы должны удалить квоты по имени параметров или использовать объект javascript.
Вы должны создать свой объект следующим образом:
var myData = new Object();
mydata.someNumber = $("#someNumber").val();
...
редактировать:
Кажется, вы пытаетесь получить ответ в вызове ajax, но ваш Java-код ничего не реагирует, возможно, вы можете попробовать его отладить. и попытаться выяснить, запускается ли Java-код?
Я нашел свою ошибку. Я не должен ставить
dataType: "json",
атрибут в $.ajax, потому что я не ожидаю, что данные JSON вернутся с сервера. Я только что удалил его.
Спасибо Ли Би и Тони за ваши советы.
возможно, попробуйте
JSON.stringify({ "myData" : myData })
Если метод сервлета не возвращает какой-либо json-контент в ajax, удалите
dataType: "json", из ajax-вызова в javascript.