我有一个用 html5 和 js 编写的应用程序,它在 Json 中发送一些数据,如下所示:
"admin": {
"id": "1",
"username": "joninazio",
"pass": "jotaoene",
"idPueblo": "30"
},
"fiesta": {
"fiesta_id": "15",
"fiesta_nombre": "Fiestas de San Roque, Laudio",
"fiesta_descr_en": "Festivities in honour of Saint Roch",
"fiesta_descr_es": "Fiestas en honor a San Roque",
"fiesta_descr_eu": "San Rokeren omenezko festak",
"fechafiestaanyo_id": "15",
"fechafiestaanyo_fecha_inicio": "2013-08-15",
"fechafiestaanyo_fecha_fin": "2013-08-26",
"dias_fiesta": [
{
"id": "25",
"fecha": "2013-08-15",
"nombre": "Txupinazo",
"descrEn": "Our Lady's festivity",
"descrEs": "Festividad de Nuestra Señora",
"descrEu": "Gure Andrearen Jaieguna"
},
{
"id": "26",
"fecha": "2013-08-16",
"nombre": "Festividad de San Roke, día del niño",
"descrEn": "Saint Roch's festivity, children's day",
"descrEs": "Festividad de San Roke, día del niño",
"descrEu": "San Rokeren jaieguna, umeen eguna"
},
{
"id": "27",
"fecha": "2013-08-17",
"nombre": "Festividad de San Rokezar, día del Joven de Ayer",
"descrEn": "Saint Rokezar's festivity, former youth's day",
"descrEs": "Festividad de San Rokezar, día del Joven de Ayer",
"descrEu": "San Rokezar jaieguna, atzoko gaztearen eguna"
},
{
"id": "28",
"fecha": "2013-08-18",
"nombre": "Descanso",
"descrEn": "Rest day",
"descrEs": "Descanso",
"descrEu": "Atseden eguna"
},
{
"id": "29",
"fecha": "2013-08-19",
"nombre": "Descanso",
"descrEn": "Rest day",
"descrEs": "Descanso",
"descrEu": "Atseden eguna"
},
{
"id": "30",
"fecha": "2013-08-20",
"nombre": "Descanso",
"descrEn": "Rest day",
"descrEs": "Descanso",
"descrEu": "Atseden eguna"
},
{
"id": "31",
"fecha": "2013-08-21",
"nombre": "Descanso",
"descrEn": "Rest day",
"descrEs": "Descanso",
"descrEu": "Atseden eguna"
},
{
"id": "32",
"fecha": "2013-08-22",
"nombre": "Día de Ajos",
"descrEn": "Garlic's day",
"descrEs": "Día de Ajos",
"descrEu": "Berakatz eguna"
},
{
"id": "33",
"fecha": "2013-08-23",
"nombre": "Día de las cuadrillas",
"descrEn": "Gangs' day",
"descrEs": "Día de las cuadrillas",
"descrEu": "Kuadrilen eguna"
},
{
"id": "34",
"fecha": "2013-08-24",
"nombre": "Baserritarraren eguna",
"descrEn": "Farmer's day",
"descrEs": "Día del baserritarra",
"descrEu": "Baserritarraren eguna"
},
{
"id": "35",
"fecha": "2013-08-25",
"nombre": "Día de las morcillas",
"descrEn": "Black pudding's day",
"descrEs": "Día de las morcillas",
"descrEu": "Odolkien eguna"
},
{
"id": "36",
"fecha": "2013-08-26",
"nombre": "Día de la cofradía, día de Roketxu",
"descrEn": "Brotherhood's day, Roketxu's day",
"descrEs": "Día de la cofradía, día de Roketxu",
"descrEu": "Senidetasunaren eguna, Roketxuren eguna"
}
],
"actos": [
{
"id": "1374770783430",
"fecha": "2013-08-15",
"nombreEn": "Txupinazo",
"nombreEs": "Txupinazo",
"nombreEu": "Txupinazo",
"descEn": "Txupinazo",
"descEs": "Txupinazo",
"descEu": "Txupinazo",
"horaInicio": "12:00",
"horaFin": "13:00",
"lat": "43.143194",
"lon": "-2.962405100000069"
},
{
"id": "1374770874134",
"fecha": "2013-08-15",
"nombreEn": "Pasacalles",
"nombreEs": "Pasacalles",
"nombreEu": "Pasacalles",
"descEn": "Pasacalles",
"descEs": "Pasacalles",
"descEu": "Pasacalles",
"horaInicio": "13:00",
"horaFin": "14:00",
"lat": "43.1434506",
"lon": "-2.9579896999999846"
}
]
}
}
这个 Json 数据将被基于 Jersey 的 Restfull Web 服务捕获。
Ajax 调用如下:
var theUrl = "...";
$.ajax({
url: theUrl,
type: "POST",
data: jsonFiesta,
dataType: "json",
contentType: "application/json; charset=utf-8",
complete: function (data){
//Redireccionar a la página principal de nuevo:
alert("Ok!!");
//window.location.replace("./home.html");
}
});
Web服务的方法是:
@POST
@Path("/uploadFiesta")
@Consumes("application/json")
@Produces("application/x-javascript")
public JSONWithPadding uploadFiesta(@QueryParam("callback") String callback,
String json){
System.out.println("****vamos a subir esta fiesta");
boolean bien = false;
try {
System.out.println(json);
bien = new AccessManager().uploadFiesta(new JSONObject(json));
} catch (Exception e) {
e.printStackTrace();
}
GsonBuilder gb = new GsonBuilder().serializeNulls().setPrettyPrinting();
Gson gson = gb.create();
ReturningClass<Object> c = new ReturningClass<Object>(true);
c.setData_boolean(bien);
return new JSONWithPadding(gson.toJson(c), callback);
}
我做错了什么?
我已经通过 Ajax 进行了几次 GET 调用,这些调用有效:
阿贾克斯:
jQuery.ajax({
url: theUrl,
type: "GET",
dataType: "jsonp",
cache: false,
async: false,
crossDomain: true,
jsonp: true,
jsonpCallback: "callback",
contentType: "application/json; charset=utf-8",
error: function (xhr,err) {
alert("Error al identificar usuario: " + xhr + "' '" + err);
},
success: function (data){
if(data.response){
$("#statusLogin").removeAttr("class");
$("#statusLogin").remove();
$("#userLoginV").removeAttr("class");
$("#userLoginV").removeAttr("value");
$("#passLoginV").removeAttr("class");
//alert("Se ha identificado satisfactoriamente " + data.object.nombreUsuario);
//Inicializar la base de datos de fiestas:
//initDb();
//Guardar datos en la sesion:
login(data.object);
//Entramos al home.html
window.location.replace("./home.html");
}else{
$("#userLoginV").attr("class", "error");
$("#passLoginV").attr("class", "error");
$("#statusLogin").attr("class", "alert alert-error");
$("#statusLogin").append("<h4>Error al identificar</h4><p>El usuario y/o la contraseña no son correctas.</p>")
alert("Error al identificar usuario. Inténtalo otra vez");
}
}
});
网络服务:
@GET
@Path("login/{user}/withPass/{pass}")
@Produces("application/x-javascript")
public JSONWithPadding loginAdministradorFiestas(
@QueryParam("callback") String callback,
@PathParam("user") String user,
@PathParam("pass") String pass
){
System.out.println("***Vamos a tratar de identificar un usuario: ");
AdministradorFiestas admin = null;
String resultado = "";
try {
admin = new AccessManager().loginAdministradorFiestas(user, pass);
System.out.println("***Peticion hecha para login!!");
GsonBuilder gb = new GsonBuilder().serializeNulls().setPrettyPrinting();
Gson gson = gb.create();
ReturningClass<AdministradorFiestas> ret = new ReturningClass<AdministradorFiestas>(true, admin);
resultado = gson.toJson(ret);
} catch (Exception e) {
e.printStackTrace();
}
return new JSONWithPadding(resultado, callback);
}
为什么 POST 不起作用?
提前致谢