I'm having some problem with Json. I want to send a json object to a database on a server and in return get a json result. I'm working with KnockoutJS, jQuery and struts-2.
This is javascript code:
function(ko, dataservice, config, router, messenger, Utente, Vario) {
var
logger = config.logger,
utente = new Utente(),
vario = new Vario(),
isValid = ko.computed(function() {
return utente.username() && utente.password() && utente.email();
}),
activate = function(routeData, callback) {
},
registrazione = function() {
if (isValid()) {
if (utente.password() === vario.password()) {
dataservice.servizisegreteria.registrazione({
success: function(result) {
if (result.esito === 'OK') {
router.navigateTo(config.hashes.registrazione);
logger.info("Controlla la tua casella mail!");
}
else {
logger.error("Salvataggio non riuscito!");
}
},
error: function(result) {
logger.error("Controllare che i dati siano giusti!");
}
}, $.toJSON({
'utente': {
'username': utente.username(),
'password': utente.password(),
'email': utente.email(),
'dataIscrizione': new Date()
}
}));
}
else
logger.error("Le Password devono combaciare!");
}
else
logger.error("Inserire tutti i dati!");
};
return {
activate: activate,
utente: utente,
vario: vario,
registrazione: registrazione
};
}
This is code for ajax request:
var init = function() {
amplify.request.define('registrazione', 'ajax', {
url: '/VenditaGioielli/gestioneSegreteria/nuovoUtente.action',
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8'
});
},
registrazione = function(callback, data) {
return amplify.request({
resourceId: 'registrazione',
data: data,
success: callback.success,
error: callback.error
});
},
init();
return {
registrazione: registrazione
}
}
This is html code:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<script type="text/javascript">
</script>
<section id="registrazione-view" class="view">
<div id="container">
<div id="contenuto">
<div class="formGioiello">
<div class="gruppoInput">
<div>
<label>Username</label>
<input type="text" placeholder="Username" data-bind="value: utente.username" required/>
</div>
<div>
<label>Password</label>
<input type="password" placeholder="Password" data-bind=" value : utente.password" required/>
</div>
<div>
<label>Ripeti Password</label>
<input type="password" placeholder="Ripeti Password" data-bind="value :vario.password" required/>
</div>
<div>
<label>Email</label>
<input type="email" placeholder="Email" data-bind="value :utente.email" required/>
</div>
</div>
<div>
<button data-bind="click: registrazione, jqueryui: 'button'">Registrati!</button>
</div>
</div>
</div>
</div>
this is struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="segreteria" namespace="/gestioneSegreteria" extends="json-default">
<interceptors>
<interceptor name="segreteriainterceptor" class="it.lt.venditagioielli.gestioneSegreteria.web.GestioneSegreteriaInterceptor" />
<interceptor-stack name="gestionesegreteriastack" >
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="segreteriainterceptor"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="gestionesegreteriastack"/>
<global-results>
<result name="nonloggato" type="redirect">/index.jsp</result>
</global-results>
<action name="nuovoUtente" class="it.lt.venditagioielli.gestioneSegreteria.web.GestioneUtenteAction" method="inserisci">
<interceptor-ref name="json">
<param name="contentType">application/json</param>
</interceptor-ref>
<interceptor-ref name="gestionesegreteriastack" />
<result type="json">
<param name="root">esito</param>
</result>
</action>
</package>
</struts>
And this is the action code:
package it.lt.venditagioielli.gestioneSegreteria.web;
import com.opensymphony.xwork2.Action;
import it.lt.venditagioielli.gestione.model.Esito;
import it.lt.venditagioielli.gestione.model.Utente;
import it.lt.venditagioielli.gestioneSegreteria.servizi.ServiziSegreteria;
public class GestioneUtenteAction {
private Utente utente = new Utente();
private Esito esito = new Esito();
private ServiziSegreteria serviziSegreteria;
private String idUtente;
public String inserisci() {
try {
serviziSegreteria.inserisciNuovoUtente(utente);
serviziSegreteria.inviaMailConferma(utente);
esito.setEsito("OK");
} catch (Exception ex) {
esito.setEsito("KO");
}
return Action.SUCCESS;
}
public Esito getEsito() {
return esito;
}
public void setEsito(Esito esito) {
this.esito = esito;
}
public Utente getUtente() {
return utente;
}
public void setUtente(Utente utente) {
this.utente = utente;
}
public void setServiziSegreteria(ServiziSegreteria serviziSegreteria) {
this.serviziSegreteria = serviziSegreteria;
}
public String getIdUtente() {
return idUtente;
}
public void setIdUtente(String idUtente) {
this.idUtente = idUtente;
}
}
I'm getting this error while getting data from database:
JSON.parse: unexpected character error
in fact, netbeans doesn't even get to the GestioneUtenteAction
class on debug mode!
The json object sent is
{"utente":{"username":"luca","password":"l","email":"ho@ho.it","dataIscrizione":"2013-11-04T13:30:09.575Z"}}
Does anyone have a clue how to fix this?
EDIT: the action isn't hit, and the answer from the server is my html page, instead of a json object. This html is given to the parseJSON function of jquery. I came to this result by comparison whit another working action