У меня есть следующий код jquery для вызова веб-метода на странице 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)
{
}
Как мне изменить код клиента для успешного вызова этой новой сигнатуры метода?
EDIT:
Следующие два синтаксиса работали
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
});
UPDATE:
Как было предложено @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
});
JSON.stringify( myObject )
для создания строки JSON из объекта javascript на случай, если позже вы захотите сгруппировать параметры в класс.
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',
просто добавьте столько свойств, сколько необходимо для объекта данных.
$.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
});
data
на стороне сервера?
$.ajax({
type: 'POST',
url: 'popup.aspx/GetJewellerAssets',
data: "jewellerId=" + filter+ "&locale=" + locale,
success: AjaxSucceeded,
error: AjaxFailed
});
Кто-нибудь еще заметил, что строка/объект json недействительна во всех ответах, кроме Дэвида Хедлунда?:)
Объекты JSON должны быть отформатированы следующим образом: { "key": ( "value" | 0 | false)}. Кроме того, запись его в виде строки требует гораздо меньше, чем строгая объект...
НЕ используйте метод ниже для отправки данных с помощью ajax-вызова
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}'
Если по ошибке пользователь вводит специальный символ, например, одинарная кавычка или двойная кавычка вызов ajax завершился неудачно из-за неправильной строки.
Используйте метод ниже, чтобы вызвать веб-службу без каких-либо проблем.
var parameter = {
jewellerId: filter,
locale : locale
};
data: JSON.stringify(parameter)
В приведенном выше параметре указано имя javascript-объекта и строят его при передаче его атрибуту data вызова ajax.
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");
}
});
Я успешно передал несколько параметров с помощью json
data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",
Все о данных, которые вы передаете; должен правильно отформатировать строку. Если вы передаете пустые данные, тогда данные: {} будут работать. Однако с несколькими параметрами он должен быть правильно отформатирован например.
var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' + '}';
....
data: dataParam
...
Лучший способ понять - обработчик ошибок с правильным параметром сообщения, чтобы знать подробные ошибки.
Просто добавьте [Эта строка отлично работает в Asp.net & find web-control Поля в jason Eg: <% Имя_файла% > ]
data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",
data: JSON.stringify({ jewellerId: filter, locale: locale })
- лучший способ, который я нашел каждый, спасибо @ChrisCaJSON.stringify
с литералом объекта вы ДОЛЖНЫ включать имя параметра в двоеточие, все они заключены в фигурные скобки{}
. ИспользованиеJSON.stringify(objectLiteral)
не работает.