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

93
demandé sur Mikhail 2009-12-16 20:34:57

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
});
132
répondu Darin Dimitrov 2009-12-16 18:27:12
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',
18
répondu David Hedlund 2009-12-16 17:37:01

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
                });
6
répondu pixeline 2009-12-16 17:37:27

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...

3
répondu Ariel 2009-12-16 22:20:52
$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',      
    data: "jewellerId=" + filter+ "&locale=" +  locale,  
    success: AjaxSucceeded,
    error: AjaxFailed
});
3
répondu Justinonday 2014-03-18 09:27:33

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 + "'}",
1
répondu Milind bilonia 2015-09-03 09:45:05
    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");
    }
    }); 
1
répondu Jasbir Rana 2016-08-25 10:08:34

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.

1
répondu Sumit Jambhale 2016-08-25 10:33:07

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.

0
répondu Subodh Patil 2013-06-05 06:40:36

j'ai passé avec succès plusieurs paramètres en utilisant json

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",
0
répondu user2739266 2013-09-02 11:24:49