l'envoi d'objet JSON avec succès à asp.net WebMethod, à l'aide de jQuery
J'ai travaillé sur ce projet pendant 3 heures et ont donné vers le haut.
j'essaye simplement d'envoyer des données à un asp.net méthode web, à l'aide de jQuery.
Les données n'est qu'un ensemble de paires clé/valeur. j'ai donc essayé de créer un tableau et en ajoutant les paires de ce tableau.
Mon WebMethod(aspx.cs) ressemble à ceci (cela peut être mauvais pour ce que je suis en train de construire en javascript, j'ai juste ne sais pas):
[WebMethod]
public static string SaveRecord(List<object> items)
.....
Voici mon exemple de code javascript:
var items = new Array;
var data1 = { compId: "1", formId: "531" }; var data2 = { compId: "2", formId: "77" }; var data3 = { compId: "3", formId: "99" }; var data4 = { status: "2", statusId: "8" }; var data5 = { name: "Value", value: "myValue" }; items[0] = data1; items[1] = data2; items[2] = data3; items[3] = data4; items[4] = data5;
Here is my jQuery ajax call:
var options = {
error: function(msg) {
alert(msg.d);
},
type: "POST",
url: "PackageList.aspx/SaveRecord",
data: { 'items': items },
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(response) {
var results = response.d;
}
};
jQuery.ajax(options);
j'obtiens l'erreur -Invalid JSON primitive: items.
-
...donc si je fais ceci:
var DTO = { 'items': articles };
et définissez le paramètre de données comme ceci:
de données: JSON.stringify(DTO)
puis, j'obtiens cette erreur:
Cannot convert object of type \u0027System.String\u0027 to type \u0027System.Collections.Generic.List`1[System.Object]\u0027
- Changer votre méthode web pour accepter un simple Objet ancien, puis jetez un oeil à exactement ce que l'objet est, et du casting et de le traiter par la méthode web.
- Question de bien, vous êtes à l'aide de webmethods, mais pas à l'aide de la classe proxy JavaScript qui est généré automatiquement pour vous?
- merci Cory, j'ai fait changer hte web méthode d'accepter un objet ordinaire, qui m'a permis de comprendre à quoi s'attendre. merci!
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation de AJAX.NET je fais toujours le paramètre d'entrée juste un simple objet ancien, puis utiliser le javascript deserializer pour le convertir à quel que soit le type que je veux. Au moins de cette façon, vous pouvez déboguer et de voir quel type d'objet, la méthode web en reçoit.
Vous avez besoin de convertir votre objet dans une chaîne de caractères lors de l'utilisation de jQuery
Et le Code-Behind
Dans votre exemple, il devrait fonctionner si votre paramètre de données est:
Gardez à l'esprit que vous avez besoin d'envoyer une chaîne JSON à ASP.NET AJAX. Si vous spécifiez un véritable objet JSON comme jQuery données de paramètre, il va sérialiser comme &k=v?k=v paires au lieu.
On dirait que vous avez lu déjà, mais prendre un autre regard sur mon exemple de l'utilisation du JavaScript DTO avec jQuery, JSON.stringify, et ASP.NET AJAX. Il couvre tout ce dont vous avez besoin pour faire ce travail.
Remarque: Vous ne devez jamais utiliser JavaScriptSerializer manuellement désérialiser JSON dans un "ScriptService" (comme l'a suggéré quelqu'un d'autre). Qu'il fait automatiquement pour vous, basé sur le type spécifié les paramètres de votre méthode. Si vous vous retrouver à faire, tu le fais mal.
Ce qui suit est un extrait de code de notre projet - j'ai eu du mal avec pas d'emballage de l'objet comme une chaîne de caractères et aussi avec les valeurs de Date - j'espère que cela aide quelqu'un:
Le serveur de signature de la méthode ressemble à ceci:
Décorer votre [WebMethod] avec un autre attribut:
Je crois que c'est dans le Système.Web.Services.Script...
voir le lien http://www.andrewrowland.com/article/display/consume-dot-net-web-service-with-jquery
C'est la façon dont vous définissez vos données (JSON)
et la ce la façon dont il devrait être
fondamentalement, vous êtes la sérialisation de l'paramètre.