La création de JSON retour “cordes” à partir d'un webservice pour une utilisation avec jquery ajax
J'ai essayé la mise en œuvre d'un service web simple dans un asp.net application à l'aide du tutoriel trouvé ici: http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx#1301 et http://dotnetslackers.com/articles/ajax/Using-jQuery-with-ASP-NET.aspx
Le problème est, mes données est retourné, comme le montre cette capture d'écran (d'après firebug):
$("#btnGet").click(function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "TimeService.svc/GetCar",
data: "{}",
dataType: "json",
success: function (data) {
alert(data.d);
}
});
});
});
Ma méthode de Service Web ressemble à ceci:
[OperationContract]
public string GetCar()
{
using (var sqlc = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\CarTracker.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"))
{
sqlc.Open();
var cmd = sqlc.CreateCommand();
cmd.CommandText = "SELECT CarID, CarName FROM tblCars";
using (var reader = cmd.ExecuteReader())
{
string sCar = "";
int testcount = 1;
for (int i = 0; i < testcount; i++)
{
reader.Read();
sCar += reader["CarName"].ToString();
}
return sCar; //Car_1
}
}
}
Donc mes questions sont:
- D'où le " d " dans firebug venir
à partir de? - Comment puis-je construire 'JSON'
"les chaînes" basé sur ma db pour revenir
retour à l'ajax de jquery fonction?
Idéalement, j'aimerais wantthe ajax de jquery données à ressembler à quelque chose comme ceci:
{"TotalCars": x, "CarList":[{"CarName":"x1", "CarID":"id1"},{"CarName":"x2", "CarID":"id2"}]}
Alors avec jquery, je peux faire des choses comme alert(data.TotalCars);
et tout ce genre de trucs.
S'il vous plaît garder à l'esprit que je suis très nouveau à ce que je reconnaissant de toute aide que vous pouvez fournir.
Je vous remercie à l'avance! <3
OriginalL'auteur Robodude | 2010-12-08
Vous devez vous connecter pour publier un commentaire.
Le "d" est utilisé par le webservice cadre pour s'assurer que un nu tableau n'est jamais retournée par un service. Ceci est fait pour travailler autour d'un potentiel cross-site Javascript exploiter.
Vous souhaitez créer des classes qui décrivent votre contrat de données, par exemple:
Ensuite, vous construisez votre valeur de retour à l'aide de ces classes. Vous pouvez aussi indiquer à la WCF à accepter la méthode HTTP GET et la sérialisation JSON pour la réponse avec la
WebGet
attribut:WCF automatiquement sérialiser vos graphe d'objet en JSON et l'envoyer au client.
Vous pouvez également utiliser ensuite la simplification de la méthode JQuery
get
:Cela a fonctionné! Mais... j'ai eu un peu plus de questions. Lors de l'utilisation d' : [WebGet(ResponseFormat = WebMessageFormat.Json)] firebug me donne "405 method not Allowed".
Merci pour l'info sur le "d". J'ai encore besoin d'y faire référence dans le jquery partie: success: function (data) { alert(data.d.CarName); } mais j'ai besoin de supprimer le WebGet
Merci pour le pointeur, maintenant que vous le dites, je crois me rappeler la lecture de ce post il y a longtemps. Semble stupide, mais que le cadre n'cela, car il ne fonctionne pas dans tous les navigateurs sauf Firefox <= 2. Ne fonctionne pas même avec IE6, sans doute l'un des plus exploités, les navigateurs de tous les temps...
désolé, vous ne pouvez pas être à l'aide de la WCF HTTP modèle de programmation (msdn.microsoft.com/en-us/library/bb412172.aspx); si c'est le cas, alors WebGet ne fonctionnera pas pour vous.
OriginalL'auteur joshperry
1) Le " d " dans la réponse JSON est mis par les ASP.Net pour empêcher le service de retour d'un javascript valide instruction de sorte qu'il ne peut pas être analysé et instancié comme un nouvel objet en javascript pour prévenir les attaques de script entre sites.
2) Le webservice transformer automatiquement vos .Net objets en JSON si vous annoter la méthode web avec
[ScriptMethod(UseHttpGet=true, ResponseFormat=ResponseFormat.Json)]
. À l'aide de la CarCollection par @joshperry, essayez:OriginalL'auteur Jeff the Bear