J'ai le code jquery suivant pour appeler une méthode Web dans une page aspx
$.ajax({
type: "POST",
url: "popup.aspx/GetJewellerAssets",
contentType: "application/json; charset=utf-8",
data: '{"jewellerId":' + filter + '}',
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
et voici la signature de la méthode web
[WebMethod]
public static string GetJewellerAssets(int jewellerId)
{
Cela fonctionne très bien.
Mais maintenant, j'ai besoin de passer deux paramètres à la méthode Web
la nouvelle méthode Web ressemble à ceci
[WebMethod]
public static string GetJewellerAssets(int jewellerId, string locale)
{
}
Comment changer le code client pour appeler avec succès cette nouvelle signature de méthode?
ÉDITER:
Les 2 syntaxes suivantes ont fonctionné
data: '{ "jewellerId":' + filter + ', "locale":"en" }',
et
data: JSON.stringify({ jewellerId: filter, locale: locale }),
où le filtre et les paramètres régionaux sont des variables locales
data: JSON.stringify({ jewellerId: filter, locale: locale })
est le meilleur moyen que j'ai trouvé, merci @ChrisCaJSON.stringify
avec un objet littéral, vous DEVEZ inclure le nom du paramètre avec deux points, le tout entouré d'{}
accolades. L'utilisationJSON.stringify(objectLiteral)
ne fonctionne pas.[WebMethod] [ScriptMethod(UseHttpGet = true)] public static string TestIBAN(string ccc)
?Réponses:
N'utilisez pas la concaténation de chaînes pour passer des paramètres, utilisez simplement un hachage de données:
METTRE À JOUR:
Comme suggéré par @Alex dans la section des commentaires, un PageMethod ASP.NET s'attend à ce que les paramètres soient encodés en JSON dans la requête, il
JSON.stringify
doit donc être appliqué sur le hachage de données:la source
JSON.stringify( myObject )
pour créer une chaîne JSON à partir d'un objet javascript, au cas où vous souhaiteriez regrouper vos paramètres dans une classe plus tard.la source
ajoutez simplement autant de propriétés que nécessaire à l'objet de données.
la source
data
côté serveur?N'utilisez pas la méthode ci-dessous pour envoyer les données en utilisant un appel ajax
Si par erreur l'utilisateur saisit un caractère spécial comme un guillemet simple ou un guillemet double, l'appel ajax échoue en raison d'une chaîne incorrecte.
Utilisez la méthode ci-dessous pour appeler le service Web sans aucun problème
Dans le paramètre ci-dessus se trouve le nom de l'objet javascript et le stringify en le passant à l'attribut data de l'appel ajax.
la source
Quelqu'un d'autre a-t-il remarqué que la chaîne / l'objet json n'est pas valide dans toutes les réponses à l'exception de celle de David Hedlund? :)
Les objets JSON doivent être formatés de la manière suivante: {"key": ("value" | 0 | false)}. De plus, l'écrire sous forme de chaîne nécessite beaucoup moins que de stringifier l'objet ...
la source
la source
Juste pour ajouter [Cette ligne fonctionne parfaitement dans Asp.net et trouver des champs de contrôle Web en jason Par exemple: <% Fieldname%>]
la source
la source
Tout est question de données que vous transmettez; doit chaîne correctement formatée. Si vous transmettez des données vides, data: {} fonctionnera. Cependant, avec plusieurs paramètres, il doit être correctement formaté, par exemple
....
données: dataParam
...
La meilleure façon de comprendre est d'avoir un gestionnaire d'erreurs avec un paramètre de message approprié, afin de connaître les erreurs détaillées.
la source
J'ai passé avec succès plusieurs paramètres en utilisant json
la source