Как я могу отправить объект JSON в веб-метод с помощью jQuery?
Отправить JSON в веб-метод?
Ответы (7)
См. это статья Дэйва Уорда. Это полное руководство по выполнению этого материала. Также вы найдете там другие замечательные вещи jquery/ASP.net.
РЕДАКТИРОВАТЬ: - Дэйв вызывает метод без каких-либо аргументов, вы можете заменить пустое свойство data фактическими данными, которые хотите отправить:
$.ajax({
type: "POST",
url: "Default.aspx/GetDate",
data: "{'name':'tiger1','hobbies':['reading','music']}",//PUT DATA HERE
contentType: "application/json; charset=utf-8",
dataType: "json",
WebMethods ожидает строку, содержащую JSON, которая будет проанализирована на стороне сервера. Я использую функцию JSON.stringify
для преобразования объекта parameters в строку и отправки данных. У меня есть такая функция:
jQuery.executePageMethod = function(location, methodName, methodArguments,
onSuccess, onFail) {
this.ajax({
type: "POST",
url: location + "/" + methodName,
data: JSON.stringify(methodArguments), // convert the arguments to string
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data, status) {
var jsonData = JSON.parse(data.d);
onSuccess(jsonData, status);
},
fail: onFail
});
};
Я рекомендую вам включить парсер json2.js на ваши страницы. , чтобы функция JSON.stringify была доступна в разных браузерах.
Другая библиотека, которую вы можете использовать, — это jquery-json
библиотека. После включения:
var json = $.toJSON(your_object);
Наиболее удобные решения, которые я видел, упрощают это, используя библиотеку JSON2.js с открытым исходным кодом для анализировать и «упорядочивать» данные сложных объектов.
Эти две замечательные статьи подробно описаны:
Использование сложных типов для вызова услуги менее… сложные, Дэйв Уорд.
Массивы JavaScript через JQuery Ajax для веб-метод Asp.Net Криса Брандсма.
Вторая статья может оказаться для вас особенно актуальной, хотя она вызывает метод веб-службы service со следующей сигнатурой...
public void SendValues(List<string> list)
... он демонстрирует, как использовать библиотеку JSON2.js для рендеринга List<string>
в javascript (используя jQuery, этот пример взят непосредственно из второй статьи):
var list = ["a", "b", "c", "d"]; var jsonText = JSON.stringify({ list: list }); // The 'list' is posted like this $.ajax({ type: "POST", url: "WebService1.asmx/SendValues", data: jsonText, contentType: "application/json; charset=utf-8", dataType: "json", success: function() { alert("it worked"); }, failure: function() { alert("Uh oh"); } });
Просто используйте URL-адрес вашего веб-метода вместо веб-службы.
Вам нужно опубликовать его с помощью Ajax и принять входящую строку в веб-методе. Затем вам нужно будет использовать десериализатор JavaScript, чтобы преобразовать его в объект на стороне сервера.
JSON.stringify помогает, но:
это не кросс-браузер, посмотрите здесь: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/#
Для встроенных функций браузера - у каждого браузера будут свои проблемы. Если вы используете вышеуказанную сериализацию, вам необходимо:
- remove newlines with regexp in strings
- позаботьтесь о "в строках
Пример кода здесь:
var dataString = JSON.stringify({
contractName: contractName,
contractNumber: contractNumber
});
$.ajax({
type: "POST",
url: "CreateQuote.aspx/GetCallHistory",
data: dataString,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
alert(result.CallHistoryDescription);
OpenLightBox('divDelete');
}
});
[System.Web.Services.WebMethod]
public static object GetCallHistory(string contractName, string contractNumber)
{
return new
{
CallHistoryDescription = "Nalan"
};
}