Отправка данных в формате JSON в веб-службу .asmx - PullRequest
7 голосов
/ 16 марта 2011

Я пытаюсь отправить несколько простых параметров в веб-службу .asmx.
Я получаю следующую ошибку: Недопустимый формат запроса: application / json;charset = utf-8.
Что мне действительно нужно сделать, так это уметь пропускать сложный объект, но я не могу выполнить запрос POST с типом контента json.

Вот мое определение WebService

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public int JsonTest2(int myparm1, int myparm2)
{
    return 101;
}

А это мой код JavaScript

function JsonTest2() {
    $.ajax({
        type: 'POST',
        url: "http://localhost/WebServices/MyTest.asmx/JsonTest2",
        data: "{myparm1:105,myparm2:23}",
        contentType: 'application/json; charset=UTF-8',
        dataType: 'json',
        async: false,
        success: function (msg) {
            alert(msg);
        },
        error: function (msg) {
            alert('failure');
            alert(msg);
        }
    });
}

Ответы [ 3 ]

5 голосов
/ 16 марта 2011

Убедитесь, что ваш класс обслуживания ASMX имеет атрибут [ScriptService].

1 голос
/ 22 марта 2011

Вы должны использовать в качестве data значение, отформатированное как правильные данные JSON:

{"myparm1":105,"myparm2":23}

вместо

{myparm1:105,myparm2:23}

Вы можете проверить на сайте http://www.jsonlint.com/ какие данные являются данными JSON.Поэтому вы должны изменить свой код на

$.ajax({
    type: 'POST',
    url: "http://localhost/WebServices/MyTest.asmx/JsonTest2",
    data: '{"myparm1":105,"myparm2":23}',
    contentType: 'application/json; charset=UTF-8',
    dataType: 'json',
    async: false,
    success: function (msg) {
        alert(msg.d);
    },
    error: function (msg) {
        alert('failure');
        alert(msg);
    }
});

. В случае более сложных входных параметров я рекомендую использовать JSON.stringify функцию json2.js (см. этот ответ например):

var myValue1 = 105, myValue2 = 23;
$.ajax({
    type: 'POST',
    data: JSON.stringify({myparm1:myValue1, myparm2:myValue2}),
    ...
});

В последней версии $.ajax использование myValue1 и myValue2 может быть сложными структурами (объектами со свойствами) или массивами, имеющими даже другие сложные структуры или массивыкак свойства.

0 голосов
/ 21 сентября 2012

Убедитесь, что URL-адрес содержит номер порта при использовании localhost.

  url: "http://localhost:1297/WebServices/MyTest.asmx/JsonTest2",
...