Отправить JSON в веб-метод?

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


person Hannoun Yassir    schedule 06.10.2009    source источник


Ответы (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",
person TheVillageIdiot    schedule 06.10.2009
comment
+1 - я думаю, что эта тема и эта конкретная статья будут появляться еще некоторое время :) - person Russ Cam; 06.10.2009
comment
Да, @Russ Dave показал свет, не знаю сколько разработчиков. - person TheVillageIdiot; 06.10.2009
comment
Вы уверены, что массив хобби передается так, как вы ожидаете? - person Josh Stodola; 07.10.2009
comment
@Josh рассматривает примеры на этой странице [json.org/example.html]. . На самом деле это только для иллюстрации, если вы считаете, что это неправильно, пожалуйста, отредактируйте ответ или укажите правильный ответ в комментарии, и я отредактирую ответ. - person TheVillageIdiot; 07.10.2009

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

person Christian C. Salvadó    schedule 06.10.2009

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

var json = $.toJSON(your_object);
person ceejayoz    schedule 06.10.2009
comment
О, спасибо за это. Минимальная версия имеет размер ~2 КБ и хорошо интегрируется с jQuery (очевидно), что хорошо, если вы уже используете ее (как я). - person Xiong Chiamiov; 07.10.2009

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

Эти две замечательные статьи подробно описаны:

Вторая статья может оказаться для вас особенно актуальной, хотя она вызывает метод веб-службы 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-адрес вашего веб-метода вместо веб-службы.

person Jeff Sternal    schedule 06.10.2009

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

person lomaxx    schedule 06.10.2009
comment
Я думаю, он спрашивает, как превратить объект JavaScript в строку JSON для отправки указанному веб-методу. - person ceejayoz; 07.10.2009

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

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

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

    • remove newlines with regexp in strings
    • позаботьтесь о "в строках
person naugtur    schedule 28.01.2010

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

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

        }
person Nalan Madheswaran    schedule 18.06.2013
comment
Обязательно ли сначала передавать ContractName, а затем ContractNumber при создании JSON, потому что иногда я не уверен, в каком параметре последовательности появится из-за динамических сценариев на стороне клиента - person Parag Bhayani; 09.04.2015