У меня есть следующий код jQuery для вызова webmethod на aspx странице
$.ajax({
type: "POST",
url: "popup.aspx/GetJewellerAssets",
contentType: "application/json; charset=utf-8",
data: '{"jewellerId":' + filter + '}',
dataType: "json",
success: AjaxSucceeded,
error: AjaxFailed
});
и вот веб-сигнатура метода
[WebMethod]
public static string GetJewellerAssets(int jewellerId)
{
Это хорошо работает.
Но теперь я должен добраться, два параметра передали веб-методу
новый веб-метод похож на это
[WebMethod]
public static string GetJewellerAssets(int jewellerId, string locale)
{
}
Как я изменяю клиентский код для успешного вызова этой новой сигнатуры метода?
Править:
Следующие 2 синтаксиса работали
data: '{ "jewellerId":' + filter + ', "locale":"en" }',
и
data: JSON.stringify({ jewellerId: filter, locale: locale }),
где фильтр и локаль являются локальными переменными
Не используйте конкатенацию строк для передачи параметров, просто используйте хэш данных:
$.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
});
ОБНОВЛЕНИЕ:
Как было предложено @Alex в разделе комментариев, ASP.NET PageMethod ожидает параметры должны быть закодированы в JSON в запросе, поэтому JSON.stringify
следует применить к хешу данных:
$.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
});
Мои 2 цента: Выглядит нормально, мой единственный комментарий: «С» подразумевает что-то вроде «Где» или «Имея», когда вы фактически устанавливаете свойство. Я'
просто добавьте столько свойств, сколько вам нужно для объекта данных.
$.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
});
Has anyone else noticed that the json string/object is invalid in all answers except for David Hedlund's? :)
JSON objects must be formatted in the following manner: {"key": ("value" | 0 | false)}. Also, writing it out as a string requires much less than stringifying the object...