Передача нескольких параметров в вызов jQuery ajax

88

У меня есть следующий код 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 }),

где фильтр и локаль - это локальные переменные

  • 9
    data: JSON.stringify({ jewellerId: filter, locale: locale }) - лучший способ, который я нашел каждый, спасибо @ChrisCa
  • 0
    Если ты такая грустная душа, как я, ты мог бы застрять на этом на несколько часов. При использовании JSON.stringify с литералом объекта вы ДОЛЖНЫ включать имя параметра в двоеточие, все они заключены в фигурные скобки {} . Использование JSON.stringify(objectLiteral) не работает.
Показать ещё 1 комментарий
Теги:

10 ответов

126
Лучший ответ

Не используйте конкатенацию строк для передачи параметров, просто используйте хэш данных:

$.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
});
  • 12
    Также рассмотрите возможность использования JSON.stringify( myObject ) для создания строки JSON из объекта javascript на случай, если позже вы захотите сгруппировать параметры в класс.
  • 1
    спасибо за ответы - однако, я получаю http статус 500, когда я пытаюсь это так. Есть идеи? или вообще как его отладить? Точка останова в веб-методе никогда не получает удар
Показать ещё 4 комментария
17
data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}',
  • 1
    это сработало: '{"jewellerId":' + filter + ', "locale": "en"}', (очевидно, я не буду жестко кодировать локаль в en, но это работает синтаксис.
  • 0
    Это работало для меня с MVC 3. Я не мог заставить Дарина работать - может быть, это MVC 3.
6

просто добавьте столько свойств, сколько необходимо для объекта данных.

 $.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
                });
  • 1
    Как в этом случае будет выглядеть подпись веб-метода для считывания свойств data на стороне сервера?
3
$.ajax({
    type: 'POST',
    url: 'popup.aspx/GetJewellerAssets',      
    data: "jewellerId=" + filter+ "&locale=" +  locale,  
    success: AjaxSucceeded,
    error: AjaxFailed
});
  • 0
    Работая тоже, используя тип: GET ?
  • 0
    или вы можете использовать массив для передачи данных в jason.stringyfy (array).
3

Кто-нибудь еще заметил, что строка/объект json недействительна во всех ответах, кроме Дэвида Хедлунда?:)

Объекты JSON должны быть отформатированы следующим образом: { "key": ( "value" | 0 | false)}. Кроме того, запись его в виде строки требует гораздо меньше, чем строгая объект...

1

НЕ используйте метод ниже для отправки данных с помощью ajax-вызова

data: '{"jewellerId":"' + filter + '","locale":"' + locale + '"}'

Если по ошибке пользователь вводит специальный символ, например, одинарная кавычка или двойная кавычка вызов ajax завершился неудачно из-за неправильной строки.

Используйте метод ниже, чтобы вызвать веб-службу без каких-либо проблем.

var parameter = {
       jewellerId: filter,
       locale : locale 
};


data: JSON.stringify(parameter)

В приведенном выше параметре указано имя javascript-объекта и строят его при передаче его атрибуту data вызова ajax.

1
    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");
    }
    }); 
0

Я успешно передал несколько параметров с помощью json

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}",
  • 0
    никогда не передавайте данные пользователя параметру без «очистки» раньше.
0

Все о данных, которые вы передаете; должен правильно отформатировать строку. Если вы передаете пустые данные, тогда данные: {} будут работать. Однако с несколькими параметрами он должен быть правильно отформатирован например.

var dataParam = '{' + '"data1Variable": "' + data1Value+ '", "data2Variable": "' + data2Value+ '"' +  '}';

....

data: dataParam

...

Лучший способ понять - обработчик ошибок с правильным параметром сообщения, чтобы знать подробные ошибки.

-1

Просто добавьте [Эта строка отлично работает в Asp.net & find web-control Поля в jason Eg: <% Имя_файла% > ]

 data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}",

Ещё вопросы

Сообщество Overcoder
Наверх
Меню