Bonjour,
Je n'arrive pas à me sortir d'un soucis de retour AJAX en JSON.
Voilà mon problème :
J'ai développé plusieurs webmethod en .NET pour récupérer des données d'une base SQLServer. Toutes ces webmethod fonctionnent correctement et le retour en JSON est correct.
J' ai par exemple la webmethod suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| [WebMethod]
public void GetDiagnostiqueurs()
{
string cs = ConfigurationManager.ConnectionStrings["EES.PortailParticipatif.BMO.Properties.Settings.ConnectionString"].ConnectionString;
List<Diagnostiqueur> diagnostiqueurs = new List<Diagnostiqueur>();
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("GetDiagnostiqueursTinergie", con);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Diagnostiqueur d = new Diagnostiqueur();
d.u_id = Convert.ToInt32(rdr["u_id"]);
d.u_societe = rdr["u_societe"].ToString();
d.u_nom = rdr["u_nom"].ToString() + " " + rdr["u_prenom"].ToString();
d.u_email = rdr["u_email"].ToString();
d.u_adresse = rdr["u_adresse"].ToString() + " " + rdr["u_adresse2"].ToString();
d.u_ville = rdr["u_ville"].ToString();
d.u_telephone = rdr["u_telephone"].ToString();
d.u_dateCreation = rdr["u_dateCreation"].ToString();
d.FinAbonnement = rdr["FinAbonnement"].ToString();
d.u_dateDerniereConnexion = rdr["u_DerniereConnexion"].ToString();
d.u_DureeAbonnement = rdr["u_DureeAbonnement"].ToString();
d.u_actif = rdr["u_actif"].ToString();
d.DiagnosticsRealises = rdr["DiagnosticsRealises"].ToString();
d.action = "";
diagnostiqueurs.Add(d);
}
con.Close();
}
JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(diagnostiqueurs));
} |
et en Ajax :
1 2 3 4 5 6 7 8 9 10 11 12 13
| $(document).ready(function() {
$.ajax({
url: '/WebServices/Diagnostiqueurs.asmx/GetDiagnostiqueurs',
method: 'post',
dataType: 'json',
success: function (data) {
alert("succes");
},
error: function (req) {
alert("erreur : " + req.responseText);
}
});
}); |
...et ça fonctionne correctement.
Par contre, j'ai une webmethod avec un passage de paramètre. au niveau .NET, le retour semble correct.
Le code .NET :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| [WebMethod(EnableSession = true)]
public void GetEntreprises(string travaux)
{
string cs = ConfigurationManager.ConnectionStrings["EES.PortailParticipatif.BMO.Properties.Settings.ConnectionString"].ConnectionString;
List<Entreprise> entreprises = new List<Entreprise>();
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd;
cmd = new SqlCommand("GetEntreprisesTravauxTinergie", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@idTravaux", SqlDbType.Int).Value = Convert.ToInt32(travaux);
con.Open();
cmd.ExecuteNonQuery();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Entreprise e = new Entreprise();
e.u_id = Convert.ToInt32(rdr["u_id"]);
e.u_societe = rdr["u_societe"].ToString();
e.u_typeSociete = rdr["u_typeSociete"].ToString();
e.u_statutSociete = rdr["u_statutSociete"].ToString();
e.u_nom = rdr["u_nom"].ToString() + " " + rdr["u_prenom"].ToString();
e.u_email = rdr["u_email"].ToString();
e.u_adresse = rdr["u_adresse"].ToString() + " " + rdr["u_adresse2"].ToString();
e.u_ville = rdr["u_ville"].ToString();
e.u_telephone = rdr["u_telephone"].ToString();
e.u_dateCreation = rdr["u_dateCreation"].ToString();
e.u_dateActivation = rdr["u_dateActivation"].ToString();
e.FinAbonnement = rdr["FinAbonnement"].ToString();
e.u_dateDerniereConnexion = rdr["u_DerniereConnexion"].ToString();
e.u_DureeAbonnement = rdr["u_DureeAbonnement"].ToString();
e.u_actif = rdr["u_actif"].ToString();
e.action = "";
entreprises.Add(e);
}
con.Close();
}
JavaScriptSerializer js = new JavaScriptSerializer();
Context.Response.Write(js.Serialize(entreprises));
} |
La réponse retournée à ce niveau semble correcte.
La voici :
[{"u_id":565,"u_societe":"x","u_typeSociete":"pme","u_statutSociete":"SARL","u_nom":"untel","u_email":"untel@x.fr","u_adresse":"2 rue untel","u_ville":"paris","u_telephone":"00 00 00 00 00","u_dateCreation":"15/01/2014","FinAbonnement":"31/12/2017","u_DureeAbonnement":"12 mois","u_dateActivation":"01/01/2016","u_dateDerniereConnexion":"28/05/2017","u_actif":"Oui","action":""}]
Pour mon ajax, j'ai mis :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| $(document).ready(function() {
$.ajax({
type:'POST',
url: '/WebServices/Entreprises.asmx/GetEntreprises',
contentType: "application/json; charset=utf-8",
data: '{travaux: "2" }',
dataType: 'json',
success: function (data) {
alert("success");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status + " : " + thrownError + " || " + xhr.responseText);
}
});
}); |
L'ajax me retourne une erreur "200 : SyntaxError: Unexpected token { in JSON at position...".
En regardant la réponse xhr, je vois que celle-ci comprend bien ce que me retourne ma webmethod, mais ajoute {"d":null} à la fin.
J'ai donc ceci en réponse xhr :
[{"u_id":565,"u_societe":"x","u_typeSociete":"pme","u_statutSociete":"SARL","u_nom":"untel","u_email":"untel@x.fr","u_adresse":"2 rue untel","u_ville":"paris","u_telephone":"00 00 00 00 00","u_dateCreation":"15/01/2014","FinAbonnement":"31/12/2017","u_DureeAbonnement":"12 mois","u_dateActivation":"01/01/2016","u_dateDerniereConnexion":"28/05/2017","u_actif":"Oui","action":""}]{"d":null}
En gras ce qui me pose problème.
Pouvez-vous m'aider à comprendre pourquoi j'ai cette {} en plus en fin de réponse ?
Merci d'avance
Partager