Отправить JSON на веб-метод? - PullRequest
7 голосов
/ 06 октября 2009

Как я могу отправить объект JSON в веб-метод, используя jQuery?

Ответы [ 7 ]

20 голосов
/ 06 октября 2009

Пожалуйста, обратитесь к этой статье Дэйва Уорда. Это полное руководство по выполнению этого материала. Также вы найдете там другие замечательные вещи 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",
11 голосов
/ 06 октября 2009

WebMethods ожидает строку, содержащую JSON, которая будет проанализирована на стороне сервера, я использую функцию JSON.stringify для преобразования объекта параметры в строку и отправки данных, у меня есть такая функция это:

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 был доступен.

6 голосов
/ 06 октября 2009

Другая библиотека, которую вы можете использовать, это jquery-json библиотека . После включения:

var json = $.toJSON(your_object);
5 голосов
/ 06 октября 2009

Наиболее удобные решения, которые я видел, упрощают это, используя библиотеку JSON2.js с открытым исходным кодом для анализа и «строкового преобразования» данных сложных объектов.

Эти две прекрасные статьи подробно описаны:

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

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-адрес веб-метода вместо веб-службы.

0 голосов
/ 18 июня 2013

Пример кода здесь:

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"
            };

        }
0 голосов
/ 28 января 2010

JSON.stringify помогает, но:

  1. это не кросс-браузер посмотрите здесь: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/#

  2. Для встроенных функций браузера - у каждого браузера будут свои проблемы. Если вы используете вышеуказанную сериализацию, вам необходимо:

    • удалить перевод строк с помощью регулярного выражения в строках
    • позаботься о "в строках
0 голосов
/ 06 октября 2009

Вам нужно будет опубликовать его с помощью Ajax и принять входящую строку в веб-методе. Затем вам нужно будет использовать десериализатор JavaScript, чтобы преобразовать его в объект на стороне сервера.

...