Passer plusieurs paramètres à l'appel ajax de jQuery
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)
{
ça marche très bien.
mais maintenant je dois 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 modifier le code client pour appeler avec succès cette nouvelle méthode de signature ?
EDIT:
les 2 syntaxes suivantes travaillées
data: '{ "jewellerId":' + filter + ', "locale":"en" }',
et
data: JSON.stringify({ jewellerId: filter, locale: locale }),
où filtre et locale sont des variables locales
10 réponses
N'utilisez pas la concaténation de chaîne pour passer les paramètres, utilisez simplement un hachage de données:
$.ajax({
type: 'POST',
url: 'popup.aspx/GetJewellerAssets',
contentType: 'application/json; charset=utf-8',
data: { jewellerId: filter, locale: 'en-US' },
dataType: 'json',
success: AjaxSucceeded,
error: AjaxFailed
});
mise à JOUR:
comme suggéré par @Alex dans la section des commentaires, un ASP.NET PageMethod s'attend à ce que les paramètres soient encodés JSON dans la requête, de sorte que JSON.stringify
devrait être appliqué sur le hachage de données:
$.ajax({
type: 'POST',
url: 'popup.aspx/GetJewellerAssets',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ jewellerId: filter, locale: 'en-US' }),
dataType: 'json',
success: AjaxSucceeded,
error: AjaxFailed
});
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',
ajoutez simplement autant de propriétés que vous avez besoin à l'objet de données.
$.ajax({
type: "POST",
url: "popup.aspx/GetJewellerAssets",
contentType: "application/json; charset=utf-8",
data: {jewellerId: filter , foo: "bar", other: "otherValue"},
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
est-ce que quelqu'un d'autre a remarqué que la chaîne json/objet est invalide dans toutes les réponses sauf celle de David Hedlund? :)
les objets JSON doivent être formatés de la manière suivante: {"key": ("value" | 0 | false)}. En outre, l'écrire comme une corde nécessite beaucoup moins que la stringification de l'objet...
$.ajax({
type: 'POST',
url: 'popup.aspx/GetJewellerAssets',
data: "jewellerId=" + filter+ "&locale=" + locale,
success: AjaxSucceeded,
error: AjaxFailed
});
Juste à ajouter sur [Cette ligne fonctionne parfaitement dans Asp.net et trouver web-Champs de contrôle de jason par exemple:<%Fieldname%>]
data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",
var valueOfTextBox=$("#result").val();
var valueOfSelectedCheckbox=$("#radio:checked").val();
$.ajax({
url: 'result.php',
type: 'POST',
data: { forValue: valueOfTextBox, check : valueOfSelectedCheckbox } ,
beforeSend: function() {
$("#loader").show();
},
success: function (response) {
$("#loader").hide();
$("#answer").text(response);
},
error: function () {
//$("#loader").show();
alert("error occured");
}
});
N'utilisez pas la méthode ci-dessous pour envoyer les données en utilisant l'appel ajax
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}'
si par erreur Utilisateur entrer caractère spécial comme une simple citation ou une double citation l'appel ajax échoue à cause d'une mauvaise chaîne.
utiliser la méthode ci-dessous pour appeler le service Web sans aucun problème
var parameter = {
jewellerId: filter,
locale : locale
};
data: JSON.stringify(parameter)
Dans le paramètre ci-dessus est le nom de l'objet javascript et stringify il lors du passage à l'attribut data de l'appel ajax.
son tout au sujet des données que vous passez; doit chaîne correctement formatée. Si vous transmettez des données vides alors data: {} fonctionnera. Cependant, avec de multiples paramètres, il doit être correctement formaté par exemple
var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' + '}';
....
data: dataParam
...
la meilleure façon de comprendre est d'avoir un gestionnaire d'erreurs avec le bon paramètre de message, afin de connaître les erreurs détaillées.
j'ai passé avec succès plusieurs paramètres en utilisant json
data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",