2009-12-16 7 views
91

У меня есть следующий код JQuery, чтобы позвонить в WebMethod в ASPX страницепередать несколько параметров JQuery Ajax вызова

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

Следующие 2 Синтаксисы работали

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

и

data: JSON.stringify({ jewellerId: filter, locale: locale }), 

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

+9

данные: JSON.stringify ({jewellerId: filter, locale: locale}) 'это лучший способ, который я каждый нашел, Спасибо @ChrisCa –

+0

Если вы такая грустная душа, как я, вы, возможно, застряли на это часами. При использовании 'JSON.stringify' с литералом объекта, вы ДОЛЖНЫ включать имя параметра в двоеточие, все завернутые внутри' {} 'скобок. Использование 'JSON.stringify (objectLiteral)' не работает. –

+0

Подпись метода как '[WebMethod] [ScriptMethod (UseHttpGet = true)] public static string TestIBAN (string ccc)'? – Kiquenet

ответ

129

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

$.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, когда я попробуйте это так. Любые идеи или даже их отладка? Точка останова в веб-методе никогда не попадает – ChrisCa

+1

новый код следующим образом: $ .ajax ({ type: 'POST', url: 'popup.aspx/GetJewellerAssets', contentType: 'application/json; кодировка = UTF-8' , данные: {jewellerId: фильтр, языковой стандарт: 'EN-US'}, Datatype: "JSON", успех: AjaxSucceeded, ошибка: AjaxFailed }); – ChrisCa

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

Это сработало: «{« jewellerId »:« + filter + »,« locale »:« en »} '(очевидно, я не буду жестко кодировать язык для en, но это синтаксис, который сработал. – ChrisCa

+0

Это сработало для меня с MVC 3. Я не мог заставить Darin работать - возможно, это MVC 3. Вещь – fiat

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' на стороне сервера? – Flo

3

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

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

3
$.ajax({ 
    type: 'POST', 
    url: 'popup.aspx/GetJewellerAssets',  
    data: "jewellerId=" + filter+ "&locale=" + locale, 
    success: AjaxSucceeded, 
    error: AjaxFailed 
}); 
+0

Работа слишком с использованием типа ***: ПОЛУЧИТЬ*** ? – Kiquenet

+0

или вы можете использовать массив для передачи данных в jason.stringyfy (array). –

0

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

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

....

данные: dataParam

...

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

0

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

data: "{'RecomendeeName':'" + document.getElementById('txtSearch').value + "'," + "'tempdata':'" +"myvalue" + "'}", 
-1

Просто добавить на [Эта линия отлично работает в Asp.net & находят Поля веб-управления в Джейсоне Например: <% Fieldname%>]

data: "{LocationName:'" + document.getElementById('<%=txtLocationName.ClientID%>').value + "',AreaID:'" + document.getElementById('<%=DropDownArea.ClientID%>').value + "'}", 
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"); 
    } 
    }); 
1

не следует использовать метод ниже для отправки данных с помощью Ajax вызова

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

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

Использование ниже метода для вызова веб-службы без выдачи

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


data: JSON.stringify(parameter) 

В выше параметра имя объекта яваскрипта и stringify его при прохождении его атрибута данных вызова Ajax.

Смежные вопросы